尝试(不成功)编写具有多个联接的查询,这就是我现在请求您帮助的原因。
表格结构:
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感到困惑..
无论如何,如果有人能指出我正确的方向,我将非常感激:)
非常感谢,
答案 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
我确信可以找到一个更好的结构......例如,汽车是一个人拥有的,一个人可以是父母,孩子或两者......