2012-10-24 66 views
0

我試圖想到一個邏輯來實現這個mysql查詢,但我想不出任何東西或在互聯網上找到任何東西。我的任務是Join兩個或多個表,並返回它的匹配字段。但是如果有三個表匹配兩個表上的行也必須顯示。說我有這3個表,加入多個表(特殊條件)

Table1- 
num |info 
---------- 
1 |aaaaa 
2 |bbbb 
3 |ccc 
4 |dddd 
4 |dddd 
5 |eeee 

Table2- 
num |info 
---------- 
2 |bbbb 
3 |ccc 
4 |dddd 
5 |eeee 

Table3- 
num |info 
---------- 
1 |aaaaa 
2 |bbbb 
6 |ffff 
7 |gggg 

我想加入這三個表,得到的結果如下,

Result- 
num |info num |info num |info 
----------- ----------- ---------- 
1 |aaaaa NULL|NULL 1 |aaaaa 
2 |bbbb 2 |bbbb 2 |bbbb 
3 |ccc 3 |ccc NULL|NULL 
4 |dddd 4 |dddd NULL|NULL 
4 |dddd 4 |dddd NULL|NULL 
5 |eeee 5 |eeee NULL|NULL 

我有這個疑問這隻能說明這是對所有三個表。

SELECT a . * , b. * , c . * 
    FROM tbl_1 a 
    JOIN tbl_2 b ON a.num = b.num 
    JOIN tbl_3 c ON a.num = c.num 
    ORDER BY a.num, b.num 

但是我想要的是顯示即使值出現在兩個表中。

非常感謝。如果這是解決它會在指着我在正確的方向是有很大的幫助:)再次感謝

表結構UPDATE

Table1- 
num |info 
---------- 
1 |aaaaa 
2 |bbbb 
3 |ccc 
3 |ccc 
4 |dddd 

Table2- 
num |info 
---------- 
1 |aaaaa 
3 |ccc 
4 |dddd 
5 |eeee 
6 |ffff 

Table3- 
num |info 
---------- 
1 |aaaaa 
6 |ffff 
2 |bbbb 
在這樣的塞納里奧記錄 6 |ffff犯規得到displayd

所需的輸出UPDATE

我想得到的結果是,

Result- 
num |info num |info num |info 
----------- ----------- ---------- 
1 |aaaaa 1 |aaaaa 1 |aaaaa 
2 |bbbb NULL|NULL 2 |bbbb 
3 |ccc 3 |ccc NULL|NULL 
3 |ccc 3 |ccc NULL|NULL 
4 |dddd 4 |dddd NULL|NULL 
NULL|NULL 6 |ffff 6 |ffff 
+0

你只想顯示從中'num'包含在任表2表3或表1的記錄來? –

+0

@JohnWoo @JohnWoo謝謝你的回覆..我需要每張桌子都考慮到,如果可能的話:) –

+0

查看下面的答案,它是根據你的例子和期望的結果 –

回答

0

對此問題予以@Andreas Wederbrand解決,

Full join for 3 tables

實現一個full join是我的查詢解決方案。

希望它可以幫助的人誰碰到這個問題:)

2
SELECT a . * , b. * , c . * 
    FROM tbl_1 a 
    LEFT JOIN tbl_2 b ON a.num = b.num 
    LEFT JOIN tbl_3 c ON a.num = c.num 
    ORDER BY a.num, b.num 
+0

嗨,謝謝你非常希望得到答覆,但是這隻解決了問題的一部分。它是連接在表格中可用的行數。如果表格1包含的行數比其他表格少,顯示錶1所包含的記錄數。:(任何解決方法?顯示任何表中的匹配記錄? –

+0

@Hasitha,那麼你真正想做什麼?爲什麼'6 nd 7'不顯示在你想要的結果? –

+0

然後你需要工會 –

4
SELECT a.* 
FROM table1 a 
     INNER JOIN 
     (
      SELECT num, info FROM table2 
      UNION 
      SELECT num, info FROM table3 
     ) b ON a.num = b.NUM 

SQLFiddle Demo

更新1

SELECT a.num numA, a.info infoA, 
     b.num numB, b.info infoB, 
     c.num numC, c.info infoC 
FROM table1 a 
     LEFT JOIN table2 b 
      ON a.num = b.num 
     LEFT JOIN table3 c 
      ON a.num = c.num 
ORDER BY a.num 

SQLFiddle Demo

+0

嘿,這是我正在尋找的.. :)非常感謝你...如果你能我可以知道如何要顯示來自所有三個表的數據,例如'a。* b。* c *'請嗎? :)我嘗試添加別名到其他表作爲'B和C'並嘗試顯示,但它沒有工作:( –

+0

,因爲'C'不存在,你能更新你想要的結果嗎?它看起來令人困惑:D –

+0

:DI更新結果:) –