Как показать имя вместо идентификатора в одной и той же таблице несколько раз с пустыми значениями?

У меня есть 2 стола. Таблица 1:

ID, ReceiveID, ProcessID, DeliverID
1      1          1          
2      1          2          3
3      3                

Таблица 2:

ID, Name
1     Jack
2     Mary
3     Paul

Я хочу получить:

Table1ID, Receiver, Processor, Delivered
1           Jack      Jack       
2           Jack      Mary       Paul
3           Paul            

Может ли кто-нибудь помочь мне построить запрос?

Я пытался:

SELECT a.Table1ID, b.name, bb.name, bc.name
FROM Table1 as a
JOIN Table2 as b ON a.ReceiveID = b.ID
JOIN Table2 as bb ON a.ProcessID = b.ID
JOIN Table2 as bc ON a.DeliverID = b.ID

но не сработало.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы должны использовать левое соединение, чтобы разрешить сохранение строк, даже если какой-либо идентификатор равен нулю:

select tab1.id, rec.name, proc.name, delv.name
from tab1
left join tab2 rec on tab1.receive_id = rec.id
left join tab2 proc on tab1.process_id = proc.id
left join tab2 delv on tab1.deliver_id = delv.id
SELECT 
    a.ID AS Table1ID, 
    COALESCE(b.Name, '') AS Receiver, 
    COALESCE(bb.Name, '') AS Processor, 
    COALESCE(bc.Name, '') AS Delivered
FROM Table1 a
LEFT JOIN Table2 b ON a.ReceiveID = b.ID
LEFT JOIN Table2 bb ON a.ProcessID = bb.ID
LEFT JOIN Table2 bc ON a.DeliverID = bc.ID;

Этот краткий запрос дает тот же результат, сопоставляя идентификаторы с именами и обрабатывая пропущенные значения. Это решит вашу проблему.

Зачем использовать COALESCE и заменять NULL пустой строкой? Я действительно сомневаюсь, что это задумано, почему кто-то должен это делать? Некоторые инструменты и СУБД, например Oracle, даже обрабатывают пустые строки как NULL.

Jonas Metzler 12.08.2024 07:30

Другие вопросы по теме