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
Другие вопросы по тегам