2016-09-19 37 views
2

我有3個表。SQL Server:選擇多個表並顯示關係甚至NULL

版本表

___________________ 
id_issue | issue | 
1  | issue A | 
2  | issue B | 
3  | issue C | 
___________________ 

問題表

_______________________ 
id_problem | problem | 
1   | problem A | 
2   | problem B | 
3   | problem C | 
_______________________ 

的Visi表。在2張桌子上有fk

__________________________________________ 
id_visi | visi | id_problem | id_issue | 
1  | visi A |  1  |  1  | 
2  | visi B |  1  |  2  | 
3  | visi C |  1  |  3  | 
4  | visi D |  2  |  1  | 
5  | visi E |  2  |  2  | 
___________________________________________ 

我想合併3張這樣的桌子。 : [編輯]

_____________________________________ 
| visi | problem  | issue | 
| visi A | problem A  | issue A | 
| visi B | problem A  | issue B | 
| visi C | problem A  | issue C | 
| visi D | problem B  | issue A | 
| visi E | problem B  | issue B | 
| NULL | problem B  | issue C | 
| NULL | problem C  | issue A | 
| NULL | problem C  | issue B | 
| NULL | problem C  | issue C | 
_____________________________________ 

我曾嘗試JOIN表,但它沒有工作。結果沒有顯示NULL的行。

回答

2

你需要的CROSS JOIN & LEFT JOIN

SELECT visi, 
     ip.id_problem, 
     ip.id_issue 
FROM (SELECT * 
     FROM issue I 
       CROSS JOIN problem P) ip 
     LEFT JOIN visi v 
       ON ip.id_problem = v.id_problem 
       AND ip.id_issue = v.id_issue 

CROSS JOIN組合:爲了填充兩個表(Issue & Problem)之間的所有可能的組合。

LEFT JOIN:從VisiNULL拉數據匹配的記錄不匹配的記錄

+0

謝謝!有用! – dionajie