Левое соединение внутри левое соединение - PullRequest
0 голосов
/ 18 октября 2019

У меня проблема с получением значений из таблиц.

Мне нужно что-то вроде этого

A.Id a1
  B.Id b1
     C.Id c1
  B.Id b2
     C.Id c2
     C.Id c3
     C.Id c4

Таблицы A и B объединены вместе, а также таблицы B и C. Таблица A может иметь одну/ ноль или более значений из таблицы B. Та же самая ситуация для значений из таблицы C.

Мне нужно выполнить левое соединение для таблицы A над таблицей B и внутри этого левого соединения для таблицы B над таблицей C.

Я пытался с левым соединением из таблиц A и B, но не знаю, как выполнить левое соединение внутри этого левого соединения.

Возможно ли это? Как будет выглядеть синтаксис для этого?

edit: данные будут выглядеть следующим образом

ZZN1  P1  NULL
ZZN1  P2  NAB1
ZZN2  P3  NAB2
ZZN2  P3  NAB3

Ответы [ 2 ]

1 голос
/ 18 октября 2019
SELECT A.Name, B.Name , C.Name 
FROM A 
LEFT JOIN B ON A.id = B.id
LEFT JOIN C ON B.id = C.id
1 голос
/ 18 октября 2019

Нет необходимости вкладывать левые объединения, вы можете просто сгладить их и позволить RDMBS обрабатывать логику.

Пример схемы:

a(id)
b(id, aid) -- aid is a foreign key to a(id)
c(id, bid) -- aid is a foreign key to b(id)

Запрос:

select a.id, b.id, c.id
from a
left join b on b.aid = a.id
left join c on c.bid = b.id

Если первое левое соединение не удается, то и третье не может быть выполнено, так как объединение столбца b.id будет null. С другой стороны, если первое левое соединение успешно, то третье может или не может быть успешным, в зависимости от того, доступен ли соответствующий bid в c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...