2016-03-03 192 views
1

我有3個表(2列),如MySQL內部連接?

table s 
NUM GRADE 
1 A  
2 B  
3 C 
5 D 

table p 
NUM GRADE 
1 B 
2 C 
2 D 
3 A 

table g 
NUM GRADE 
1 A 
3 C 
3 B 
4 D 

欲內加入他們彼此這樣(上s.NUM = p.NUM = g.NUM)作爲

NUM GRADE 
1 A 
1 B 
1 A  
2 B 
2 C 
2 D 
3 A 
3 C 
3 B 

我該怎麼辦?

謝謝

回答

2

您可以識別所有三個表之間共享的公共NUM值的查詢結合了UNION ALL查詢。在下面的查詢中,後面的表格提供了一個過濾器來刪除所有三個表格中沒有出現的任何NUM記錄。

SELECT t1.NUM, t1.GRADE 
FROM 
(
    SELECT NUM, GRADE FROM s 
    UNION ALL 
    SELECT NUM, GRADE FROM p 
    UNION ALL 
    SELECT NUM, GRADE FROM g 
) t1 
INNER JOIN 
(
    SELECT s.NUM 
    FROM s INNER JOIN p 
     ON s.NUM = p.NUM 
    INNER JOIN g 
     ON s.NUM = G.NUM 
) t2 
    ON t1.NUM = t2.NUM 
ORDER BY t1.NUM 
+0

如果表s中有記錄不存在於表p和g中,該怎麼辦?它包含在結果中 – Sherlock

+0

良好的捕獲。 upaged –

+0

是的,我明白了...給我30秒 –