SQL: значение JOIN из таблицы A с таблицей C, если таблица B пуста
У меня есть три таблицы, и я хочу объединить их (внутреннее соединение) для сопоставления таблиц A и B, однако в случае, если для идентификатора в A нет совпадения, я хочу сопоставить его с таблицей C. Вот так:
Таблица А person
id person
1 John
2 Adam
3 Carolin
Таблица Б pet
owner_id pet
1 Bubbles
3 Fido
Таблица С vehicle
owner_id vehicle
2 Mustang
3 Golf
Результат, который я ожидаю, будет
person pet/vehicle
1 Bubbles
2 Mustang
3 Fido
для человека 3 домашнее животное выбрано, а не транспортное средство, поскольку домашнее животное не пусто.
Я могу, конечно, сделать так:
select a.person,b.pet,c.vehicle from person a
join pet b on a.id = b.owner_id
join vehicle c on a.id = c.owner_id
но это даст мне три колонки, где мне нужно две.
1 ответ
Решение
Ты можешь использовать LEFT JOIN
с COALESCE
:
select a.person, coalesce(b.pet, c.vehicle) as 'pet/vehicle'
from person a
left join pet b on a.id = b.owner_id
left join vehicle c on a.id = c.owner_id