#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