Условный запрос Mysql для перечисления столбца из одной из таблиц, но не из обеих

#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 . правильно .. в этом случае все предлагаемые пути полезны