MySQL中具有多个连接的复杂查询

时间:2014-05-15 12:23:50

标签: mysql

尝试(不成功)编写具有多个联接的查询,这就是我现在请求您帮助的原因。

表格结构:

  • 有很多孩子和很多车的父母
  • 有一个父母和多辆汽车的孩子
  • 要么有一个父母或一个孩子的车。

SQL Tables http://socialfork.zxq.net/img/sqlquery.jpg

我要做的是:

我试图找到每个父母的汽车总价值。 (父母"拥有"他的儿童车,所以儿童车价值的总和应该加到父母汽车价值的总和上。)

例如,我希望我的查询返回:

  • 如果托马斯有一辆价值5000的汽车,还有一辆有两辆汽车也值5000的汽车,托马斯的总价值是5000 + 5000 * 2 = 15000。

  • 如果约翰有两辆价值2000的汽车,两个孩子各有两辆价值2000的汽车,约翰的总价值是:2000 * 2 + 2000 * 2 + 2000 * 2 = 12000。

简而言之:

name   | total
--------------
Thomas | 15000
John   | 12000

到目前为止,我有:

SELECT p.name,
SUM(IFNULL(carparent.price, 0)+IFNULL(carchild.price, 0)) total
FROM parent p 

# first get the childrens cars
INNER JOIN child c ON c.parent_id = p.id
INNER JOIN car carchild ON carchild.child_id = c.id

# now get the parents cars
LEFT JOIN car carparent ON carparent.parent_id = p.id

GROUP BY p.name
ORDER BY total DESC

当父母有一个以上的孩子时,这会返回奇怪的结果...我想我对所有的JOINS感到困惑..

无论如何,如果有人能指出我正确的方向,我将非常感激:)

非常感谢,

1 个答案:

答案 0 :(得分:0)

我试图像前面所述制作你的数据库。

这是我的解决方案。

select 
Name,
(select sum(price) 
    from car 
    where car.Parent_id=parent.id) as `Value Parent Car(s)`, 
(select sum(price) 
    from car 
    left join child 
    on car.child_id=child.id 
    where child.parent_id=parent.id) as `Value of Child car(s)`
from parent

或者获得总数

select 
id, 
Name,
((select sum(price) 
    from car 
    where car.Parent_id=parent.id) +
(select sum(price) 
    from car 
    left join child 
    on car.child_id=child.id 
    where child.parent_id=parent.id)) as `Total Value car(s)`
from parent

我确信可以找到一个更好的结构......例如,汽车是一个人拥有的,一个人可以是父母,孩子或两者......