MySQL запрос на получение записи по умолчанию, если указанная c запись не найдена - PullRequest
0 голосов
/ 12 марта 2020

Я хотел бы иметь таблицу, в которой можно хранить значения команды c, если запись не найдена, будет возвращена запись по умолчанию.

TableName: Products

ProdID  ProdName    Team
1       AAA         <NULL>
1       AAA_T1      T1
2       BBB         <NULL>
3       CCC         <NULL>
3       CCC_T1      T1
3       CCC_T2      T2
4       DDD         <NULL>
4       DDD_T3      T3 

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

Команда T1

ProdID  ProdName
1       AAA_T1
2       BBB
3       CCC_T1
4       DDD

Команда T2

ProdID  ProdName
1       AAA
2       BBB
3       CCC_T2
4       DDD

Команда T3

ProdID  ProdName
1       AAA
2       BBB
3       CCC
4       DDD_T3

Как мне этого добиться? Нужно ли менять структуру таблицы?

1 Ответ

0 голосов
/ 12 марта 2020

С NOT EXISTS:

select distinct p.prodname
from products p
where p.team = 'T1'
or (
  p.team is null 
  and not exists (
    select 1 from products
    where prodid = p.prodid and team = 'T1'
  )
)

Вы можете удалить distinct, если нет дубликатов. Смотрите демо . Или с условной агрегацией:

select max(case when team = 'T1' or team is null then prodname end) prodname
from products
group by prodid

См. Демоверсию . Результаты:

> | prodname |
> | :------- |
> | AAA_T1   |
> | BBB      |
> | CCC_T1   |
> | DDD      |
...