Объединение 4 таблиц на сервере SQL - PullRequest
0 голосов
/ 05 апреля 2020

Нужна помощь по этому вопросу.

  • Таблица A: SR #, активность, статус, дата / время (например, 100, Создать, открыть, 2019-01-01)
  • Таблица B: SR #, SO #, активность, статус, дата / время (например, 100, A100, обновление, выполняется, 2019-01-02)
  • Таблица C: SO #, активность, статус, дата / время ( Например: A100, Удалить, Отменено, 2019-01-03)
  • Таблица D: SO #, активность, статус, дата / время (данные могут присутствовать или отсутствуют)

SR # может не иметь ни одного (ноль) или нескольких SO, поэтому мне нужна финальная таблица A, B, C и D, которая должна содержать

SR#, SO#, activity, status, date/time
100, A100, Create, open,2019-01-01
100, A100, Update, in-progress, 2019-01-02
100, A100, Delete, Cancelled, 2019-01-03

Примечание: таблица B / C / D может или не может есть данные. Финальный стол должен быть A, B, C и D.

Я пробовал левое соединение, но оно не работает. Это дает все строки из всех таблиц. Я ищу объединение всех столбцов таблицы на основе SO #.

SELECT DISTINCT
    A.*, B.*, C.*, D.*
FROM B 
LEFT JOIN A ON A.SR# = B.SR# 
LEFT JOIN C ON C.SO# = B.SO# 
LEFT JOIN D ON B.SO# = D.SO#

Выходные данные возвращают все строки.

Любая помощь приветствуется.

Спасибо.

1 Ответ

0 голосов
/ 05 апреля 2020

Рассмотрим запрос UNION по всем JOIN парам к Таблице B , явно определяя одинаковые столбцы в каждом SELECT:

SELECT B.[SR#], B.[SO#], A.[activity], A.[status], A.[date/time]
FROM B 
INNER JOIN A ON A.[SR#] = B.[SR#]

UNION

SELECT B.[SR#], B.[SO#], B.[activity], B.[status], B.[date/time]
FROM B 

UNION

SELECT B.[SR#], C.[SO#], C.[activity], C.[status], C.[date/time]
FROM B 
INNER JOIN C ON C.[SO#] = B.[SO#]

UNION

SELECT B.[SR#], D.[SO#], D.[activity], D.[status], D.[date/time]
FROM B 
INNER JOIN D ON D.[SO#] = B.[SO#]
...