我有3张桌子:
# table1 #
## id ##
1
# table2 #
## id table1 ##
1 1
2 1
3 1
# table3 #
## id table2 ##
1 1
2 1
3 2
4 2
5 3
6 3
查询,在单个查询中加入3个表
Select COUNT(t2.id)
FROM table1 t1
LEFT OUTER JOIN table2 t2 ON t2.table1 = t1.id
LEFT OUTER JOIN table3 t3 ON t3.table2 = t2.id
WHERE t1.id = 1
GROUP BY t1.id
COUNT(t2.id)应该返回3,但我得到6 - 我认为这是因为table2中的每条记录在table3中都有2条记录。
也许我应该改变这一行?
LEFT OUTER JOIN table3 t3 ON t3.t2 = t2.id
也许组合这个或什么?但是这是怎么回事?
====================================== 修改
添加到table2列"价格"
# table2 #
## id table1 price ##
1 1 10
2 1 20
3 1 10
Select SUM(t2.price)
FROM table1 t1
LEFT OUTER JOIN table2 t2 ON t2.table1 = t1.id
LEFT OUTER JOIN table3 t3 ON t3.table2 = t2.id
WHERE t1.id = 1
GROUP BY t1.id
现在,当我想要总和我得到80的价格,但我应该得到40 - 明显不是很好的解决方案,因为价格不是唯一的。
答案 0 :(得分:2)
更改
Select COUNT(t2.id)
到
Select COUNT(distinct t2.id)
并删除group by
,因为您只使用WHERE t1.id = 1
答案 1 :(得分:0)
你说:
如果这不是我所需要的。假设 - 在表2中我有另一列"价格"在我的查询中我试图得到这个:SUM(t2.price) - 然后我得到双倍数 - 原因如上。区别不是好主意,因为这个专栏没有独特的价值。我怎么解决这个问题?
删除连接到table3:
Select COUNT(t2.id)
FROM table1 t1
LEFT JOIN table2 t2 ON t2.table1 = t1.id
WHERE t1.id = 1;
答案 2 :(得分:0)
当您加入t3时,您将行扩展为6。
Select sum(t2.price)
FROM table1 t1
LEFT OUTER JOIN table2 t2 ON t2.table1 = t1.id
WHERE t1.id = 1;
请检查SQL Fiddle http://sqlfiddle.com/#!2/2236fb/11