2013-06-12 21 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