2011-02-15 144 views
1

哦,很棒的SQL神,我需要您的幫助。與查詢表連接兩張表

這裏是我的架構:

CAR(Serial_no,Model,Manufacturer,Price) 
OPTIONS(Serial_no,Option_name,Price) 
SALE(Salesperson_id,Serial_no,Date,Sale_price) 
SALESPERSON(Salesperson_id,Name,Phone) 
  1. 首先,我需要Serial_no加入CAR和銷售表。
  2. 其次,我需要採取的選項表和SUM所有類似Serial_no價格將以下作用:

    SELECT O.Serial_no,SUM(O.Price) 從選項:Ø GROUP BY(O 。序列號);

  3. 最後,我需要合併步驟一和二,並查詢結果,所以我得到一個結果集,其中CAR.Price <(SALE.Sale_price + OPTIONS.Price)。

可以這樣做嗎?任何幫助將非常感激!

謝謝, 馬克

+0

您好,我已經試過這使farSELECT C.Serial_no,C.Price,S.Sale_price,SUM (O.Price)AS成本 \t FROM(CAR C,SALE S)LEFT OUTER JOIN OPTIONSö \t \t ON C.Serial_no = O.Serial_no \t WHERE C.Serial_no = S.Serial_no AND C.Price <(S .Sale_price) \t GROUP BY(C.Serial_no);但它不允許我將O.Cost添加到S.Sale_price – 2011-02-15 03:30:17

+0

是否僅針對每輛車有單獨銷售? – 2011-02-15 03:32:47

回答

1
SELECT C.Serial_no, 
    MIN(c.Price) CarPrice, 
    MIN(s.Sale_price) SalePrice, 
    SUM(o.Price) OptionsPrice, 
    MIN(s.Sale_price) + IFNULL(SUM(o.Price),0) TotalPrice 
FROM Car c JOIN Sale s ON c.Serial_no = s.Serial_no 
    LEFT JOIN `Options` o ON c.Serial_no = o.Serial_no 
GROUP BY c.Serial_no 
HAVING MIN(c.Price) < MIN(s.Sale_price) + IFNULL(SUM(o.Price),0) 

注:MIN()不秋毫,它只是存在,因爲你是分組,並且選項表可有多行。

另一種選擇是做一個子查詢,這可能導致更好的性能計算:

SELECT C.Serial_no, 
    C.Price, 
    S.Sale_price, 
    og.SumPrice 
FROM Car c JOIN Sale s ON c.Serial_no = s.Serial_no 
    LEFT JOIN (
    SELECT Serial_no, SUM(Price) SumPrice 
    FROM `Options` 
    GROUP BY Serial_no 
) og ON c.Serial_no = og.Serial_no 
WHERE c.Price < s.Sale_price + IFNULL(og.SumPrice,0)