Комплексное объединение для возврата SuperSet

Вечер всех,

Некоторое время я обменивался этим, и по какой-то причине я просто не могу заставить свою логику вернуть то, что я ожидаю.

У меня есть 3 таблицы данных, а также 3 таблицы связывания бизнес-концепции.

  • Таблица 1
  • Таблица 2
  • Таблица3

Правила:

  • Таблица 1 может быть связана с таблицей 2
  • Таблица 1 может быть напрямую связана с таблицей 3
  • Таблица 1 может быть косвенно связана с таблицей 3 через таблицу 2

TableStructures Я попробовал несколько вариантов, однако, похоже, обрезать записи.

SELECT
    *
FROM
            Table1          T1
INNER JOIN  Table1_to_Table2_Link   L1  on L1.T1_ID = T1.ID
RIGHT JOIN  TABLE2          T2  ON L1.T2_ID = T2.ID
INNER JOIN  Table2_to_Table3_Link   L2  ON L2.T2_ID = T2.ID
Right JOIN  Table3          T3  ON L2.T3_ID = T3.ID
INNER JOIN  Table1_to_Table3_Link   L3  on T1.ID = L3.T1_ID

Немного неудобно объяснять, но в общем случае мне требуются все данные из таблицы 1 и только данные из таблиц 2 и 3, если они прямо или косвенно связаны с таблицей 1. Таблицы 2 и 3 не обязательно должны иметь связанные бизнес-концепция

Ожидаемое возвращение есть; введите описание изображения здесь Любая помощь будет принята с благодарностью

1 ответ

Решение

Ты был прав. Это было не так просто. Однако я мог получить желаемый результат по запросу ниже

SELECT
T1.*,
T2.*,
T3.*
FROM
        Table1  T1
LEFT JOIN  Table1_to_Table2_Link   L1  on T1.ID = L1.T1_ID
LEFT JOIN  TABLE2          T2  ON T2.ID = L1.T2_ID 
LEFT JOIN (
    SELECT T1_ID AS ID,T3_ID AS table3Id FROM dbo.Table1_to_Table3_Link
    UNION ALL
    SELECT T2_ID AS ID,T3_ID AS table3Id FROM dbo.Table2_to_Table3_Link
    ) S
    ON T1.ID = s.ID 
    OR t2.ID = s.id
LEFT JOIN dbo.Table3 T3 ON S.table3Id = T3.ID

Надеюсь, поможет.

Другие вопросы по тегам