2011-02-15 93 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)