2016-09-19 1 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 Таблица. Есть fk на 2 столах до

__________________________________________ 
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 | 
_____________________________________ 

Я попытался РЕГИСТРИРУЙТЕСЬ таблицу, но это не работало. Результат не показывал строку 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: Для извлечения данных для соответствующих записей из Visi и NULL для не совпадающих записей

+0

спасибо! оно работает! – dionajie