使用查询表连接两个表

时间:2011-02-15 03:23:03

标签: sql mysql

哦,伟大的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和SALE表。
  2. 其次,我需要获取OPTIONS表和SUM类似Serial_no的所有价格,具体如下:

    SELECT O.Serial_no,SUM(O.Price)     来自OPTIONS O.     GROUP BY(O.Serial_no);

  3. 最后我需要合并第一步和第二步并查询结果,这样我得到的结果就是CAR.Price< (SALE.Sale_price + OPTIONS.Price)。

  4. 可以这样做吗?任何帮助都会非常感激!

    谢谢, 标记

1 个答案:

答案 0 :(得分: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)