2014-03-26 217 views
0

我有一個表1與一對多的關係表2 表1還具有一個與表中的許多關係3左外連接到兩個表

我想要的連接的結果相結合但所有IM重複獲取值

這裏的結構:

table 1 
reportnumber 
1 
2 
3 

table 2 
reportnumber col1 
1    a 
1    b 
2    c 
3    a 

table 3 
reportnumber col2 
1    x 
1    y 
1    z 
2    w 

預期的結果集

reportnumber col1 col2 
1    a  x 
1    b  y 
1      z 
2    c  w 
3    a 

我敢肯定,這是可能的左外連接,但我不能得到正確的語法

任何線索?

這是結果是什麼我嘗試

select * from table1 a 
left outer join table2 b on a.reportnumber=b.reportnumber 
left outer join table3 on a.reportnumer=c.reportnumber 

但是這樣

reportnumber col1 col2 
1    a  x 
1    a  y 
1    a  z 
1    b  x 
1    b  y 
1    b  z 
... 
+3

你指出,你不能得到語法正確,你應該與你試圖查詢編輯您的帖子。 – Taryn

+0

此外,不正確的結果集可能會幫助 – jaywayco

回答

0

這是不容易的MySQL,但是你可以通過使用變量做到這一點。這與join幾乎沒有關係。或者,它與join有很大關係,但您沒有正確的join鍵,並且您沒有full outer join

解決方法是枚舉每個表中具有數據列的行。然後,使用枚舉和reportnumber彙總:

select reportnumber, max(col1) as col1, max(col2) as col2 
from ((select t2.reportnumber, col1, null as col2, @rn2 := @rn2 + 1 as rn 
     from table2 t2 cross join 
      (select @rn2 := 0) const 
    ) union all 
     (select t3.reportnumber, null, t3.col2, @rn3 := @rn3 + 1 as rn 
     from table3 t3 cross join 
      (select @rn3 := 0) const 
    ) 
    ) t 
group by reportnumber, rn; 
+0

我不明白這一點,但我試了一下。它說「每個派生表都必須有自己的別名」 – case1352

+0

@ case1352。 。 。每個派生表在這個查詢中都有自己的別名。 –