Как создать SQL-запрос с двумя внутренними соединениями и случаем if

#sql #sql-server

Вопрос:

Я пытаюсь создать SQL — запрос с двумя внутренними соединениями и случаем if. Я создаю пример, чтобы объяснить, что я имею в виду:

ID Typ Случай
123 ААА zzz
124 ВВВ ууу
125 ССС ууу
Тип1 ID1
ААА 888
ВВВ 999
ССС 777
ID2 Результат
666 1
555 2
777 3

Словами, запрос должен выполнять: Поиск в первой таблице для идентификатора 125, поэтому я получаю тип CCC и регистр yyy, если регистр yyy, затем выполните поиск во второй таблице для CCC в столбце Typ1, здесь я получаю идентификатор 777, а затем выполните поиск в третьей таблице для 777 в столбце ID2, чтобы получить результат 3. Если случай не yyy, то просто покажите мне результаты первой таблицы. Результат должен быть:

ID Typ Результат
123 ААА Нет совпадения
124 ВВВ Нет совпадения
125 ССС 3

Я надеюсь, вы поймете, что я пытаюсь объяснить 🙂

Ответ №1:

Вы хотите выбрать данные из первой таблицы и показывать данные только из других таблиц, где это уместно. Итак, присоединяйтесь к другим столам.

 select t1.id, t1.typ, t3.result from t1 left outer join t2 on t2.typ1 = t1.typ and t1.case = 'yyy' left outer join t3 on t3.id2 = t2.id1 order by t1.id;  

Комментарии:

1. Как в этом случае левое соединение лучше, чем внутреннее соединение?

2. @gaganshera: При внутреннем соединении вы получаете только совпадения. Поэтому, если нам тоже нужны строки t1 без совпадения, нам нужны внешние соединения.

3. Ааа, да. Я забыл об этом условии 🙂