#mysql
#mysql
Вопрос:
У нас есть две таблицы
таблица: publisher
( publisher_id
уникальна)
-------------- ------ --
| publisher_id | name | |
-------------- ------ --
| 100 | abc | |
| 131 | def | |
| 355 | ghi | |
-------------- ------ --
таблица: publisher_alias
(составной индекс publisher_id
и name
уникален)
-------------- ------- --
| publisher_id | name | |
-------------- ------- --
| 131 | xyz | |
| 131 | pqr | |
| 355 | mln | |
| 355 | opr | |
-------------- ------- --
Я ищу команду mysql, которая сгенерирует список имен из publisher
таблицы (если запись псевдонима не найдена). Если запись псевдонима найдена для данного publisher_id, то я хочу, чтобы все name
from publisher_alias
были включены в список ( name
from publisher
следует опустить). Вывод должен выглядеть следующим образом
-- ------ --
| | name | |
-- ------ --
| | abc | |
| | xyz | |
| | pqr | |
| | mln | |
| | opr | |
-- ------ --
Ответ №1:
Вы можете использовать предложение case when
select case when b.name is null then a.name else b.name end
from publisher as a
left join publisher_alias as b on a.publisher_id = b.publisher_id
Комментарии:
1. В команде есть небольшая опечатка (‘the’ следует заменить на ‘then’), но в остальном она идеальна. Спасибо
2. Вы также можете использовать более короткий
IFNULL(b.name, a.name)
или стандартныйCOALESCE(b.name, a.name)
3. @Barmar . правильно .. в этом случае все предлагаемые пути полезны