2016-09-19 17 views
2

iテーブルが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つのテーブルを組み合わせたいと思います。 : [EDIT]

_____________________________________ 
| 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をしようとしたが、それは仕事をdidntの。結果はNULLの行を表示しませんでした。二つのテーブル(Issue & Problem)の間のすべての可能な組み合わせを移入するには:

答えて

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の組み合わせを必要とします。

LEFT JOIN:一致しなかったレコード

+0

ためVisiNULLからマッチしたレコードのデータを取得するには、ありがとう!できます! – dionajie

関連する問題