Условное левое соединение, если предыдущее соединение было нулевым - PullRequest
0 голосов
/ 08 октября 2019

У меня есть таблица «Идентификатор», которая имеет отношение один ко многим с другими таблицами. Другие таблицы (10 таблиц) имеют первичный ключ к таблице «Идентификатор». FK может быть нулевым.

Для каждой строки в таблице «Идентификатор» мне нужно знать, связана ли запись с какой-либо другой таблицей.

Я мог бы написать что-то вроде этого:

SELECT * FROM IDENTIFIER
LEFT JOIN TABLE1 T1 on T1.IDENTIFIER_ID = IDENTIFIER.ID
LEFT JOIN TABLE2 T2 on T2.IDENTIFIER_ID = IDENTIFIER.ID
LEFT JOIN TABLE3 T3 on T3.IDENTIFIER_ID = IDENTIFIER.ID
LEFT JOIN TABLE4 T4 on T4.IDENTIFIER_ID = IDENTIFIER.ID
LEFT JOIN TABLE5 T5 on T5.IDENTIFIER_ID = IDENTIFIER.ID
...

Но если первое левое соединение (к таблице Table1) не было нулевым - я бы хотел пропустить другие левые соединения по соображениям производительности. Таблицы с 1 по 10 содержат миллионы записей, и я не хотел бы присоединяться к ним, если в этом нет необходимости.

1 Ответ

0 голосов
/ 08 октября 2019

Я не уверен, но вы можете попробовать это.

SELECT * FROM IDENTIFIER
LEFT JOIN TABLE1 T1 on T1.IDENTIFIER_ID = IDENTIFIER.ID
LEFT JOIN TABLE2 T2 on T2.IDENTIFIER_ID = IDENTIFIER.ID AND T1.IDENTIFIER_ID IS NULL
LEFT JOIN TABLE3 T3 on T3.IDENTIFIER_ID = IDENTIFIER.ID AND T2.IDENTIFIER_ID IS NULL
LEFT JOIN TABLE4 T4 on T4.IDENTIFIER_ID = IDENTIFIER.ID AND T3.IDENTIFIER_ID IS NULL
LEFT JOIN TABLE5 T5 on T5.IDENTIFIER_ID = IDENTIFIER.ID AND T4.IDENTIFIER_ID IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...