2013-06-12 20 views
0

我有三个表t1,t2,t3。 T3与t2和t2与t1有关。 我有这个选择Mysql加入三个表比组加两列

select t1.id,sum(t3.column) 
from 
    t1 
    join t2 on t2.fk = t1.id 
    join t3 on t3.fk = t2.id 
where t1.column = 'something' 
group by t1.id,t3.fk; 

选择无组有120行。用

group by t3.fk 

它有5行。 With

group by t1.id it have 1 row 

这仍然没问题。但如果我有

group by t3.fk,t1.id 

它有5行。我预计只有1排。 实施例的数据:

t1.id |t1.some_column 
5  |"some data" 

t2.id |t2.fk |t2.some_column 
1  |5  |"a" 
2  |5  |"b" 
3  |5  |"c" 
4  |5  |"d" 
5  |5  |"e" 

t3.id |t3.fk |t3.column 
1  |1  |1 
...................... 
24  |2  |1 
...................... 
48  |3  |1 
...................... 
72  |3  |1 
...................... 
96  |3  |1 
...................... 

select返回:

t1.id |sum(t3.column) 
5  |24 
5  |24 
5  |24 
5  |24 
5  |24 

我无法理解为什么会出现5列相同t1.id当我通过t1.id基。我知道,如果它只返回一行,我就失去了关于总和的信息,但是它也没有选择总和。我知道这个选择是愚蠢的,没有任何意义,但它可以帮助我更好地理解。

+0

考虑提供一个sqlfiddle以及相应的和期望的结果。为了这个例子的目的,我确信20行就足够了。 – Strawberry

回答

1

我相信你不会向我们提供足够的信息,因为结果没有意义。

  • group by t2.fk返回5行是指有五种不同t2.fk
  • group by t1.id返回1行装置只有一个differednt t1.id值。
  • 由于您加入t2.fk = t1.id,这意味着t2.fk的不同值的数量和t1.id的不同值的数量应该与您之前的结果相矛盾。

对不起,你是对的。它应该是t3.fk不是t2.fk.我编辑它 并添加一些数据。 - CoCumis

没有什么难以理解的。假设有[0124],[1,2,3,4,5]等t3.fk这5个唯一值,以及t1.id [1]等1个唯一值,则t3.fk, t1.id的组合应产生5个独特的组合,例如[(1, 1),(2,1),(3,1),(4,1),(5,1)]。所以返回5行是预期的。

+0

对不起,你说得对。它应该是t3.fk不是t2.fk.我编辑它并添加一些数据。 – CoCumis

+0

没有什么难以理解的。假设有't3.fk'的5个唯一值,例如[1,2,3,4,5]和't1.id'的1个唯一值,例如[1],'t3.fk ,t1.id'应该产生5个独特的组合,例如[(1,1),(2,1),(3,1),(4,1),(5,1)]。所以返回5行是预期的。 – invisal