#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. Ааа, да. Я забыл об этом условии 🙂