Запрос данных путем объединения таблиц в DB2

#sql #database #db2

#sql #База данных #db2

Вопрос:

Это сведения о моей таблице:

Таблица1

 id       name
----------------
101      syed
102      shaik
103      khan
  

Таблица2

 l_id     sup_id
-----------------
101     102            ----> 102 is supervisor of 101
102     103            ----> 103 is supervisor of 102
103     104            ----> 104 is supervisor of 103
  

Мой ожидаемый результат — получить все данные людей вместе с идентификаторами и именем их супервизора.

 id  name    sup_id  sup_name
------------------------------
101 syed    102     shaik
102 shaik   103     khan
103 khan                      --> Since 104 is not available in the master table (table 1), it should have as empty values.
  

В таблице-1 у меня есть три строки из 101,102,103, которые являются основной таблицей, в которой будет храниться вся базовая информация о персонале. Таблица 2 состоит из идентификаторов входа супервизора с их подчиненными идентификаторами. Общим столбцом между таблицами table1 и table2 является id и l_id. Итак, я пытаюсь извлечь данные следующим образом, чтобы получить детали.

Мой запрос выглядит следующим образом

   select t1.id,t1.name, sup_id,t2.name as sup_name
  from table2 t 
 join table1 t1 on t1.id=t.l_id
 join table1 t2 on t2.id=t.sup_id
  

Я могу получить первые 2 строки, поскольку у них есть идентификатор супервизора в таблице 1, но не 3-я строка

Любые идеи будут высоко оценены

 person id - person name - supervisor id - supervisor name
  

Ответ №1:

Попробуйте это:

  select t1.id,t1.name, sup_id,t2.name as sup_name
 from table2 t 
 left join table1 t1 on t1.id=t.l_id
 left join table1 t2 on t2.id=t.sup_id
  

JOIN / INNER JOIN не будет возвращать записи, которые не имеют соответствующих записей в JOIN таблице.

Возможно, вы захотите проверить различные типы соединений.

Ответ №2:

Вы также можете использовать подзапрос, если вы действительно хотите использовать внутреннее соединение.

выберите b.id ,b.name ,b.sup_id,t2.name (выберите t.id ,sup_id,t1.name как имя из таблицы2 t внутреннее соединение таблицы1 t1 на t1.id=t.l_id ) b левое соединение таблицы1 t2 на t2.id=b.sup_id