多个MySQL关系中的大量记录(与添加关系的关系) - GROUP BY和JOIN?

时间:2014-06-11 15:32:50

标签: mysql sql join relation

我有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 - 明显不是很好的解决方案,因为价格不是唯一的。

3 个答案:

答案 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