首页 > 解决方案 > 如果未找到特定记录,则 MySQL 查询获取默认记录

问题描述

我想要一个能够存储团队特定值的表,如果没有找到记录,将返回默认记录。

表名:产品

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 

对于查询,Team 需要传入,所有产品都将返回。

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

我如何实现这一目标?我需要更改表结构吗?

标签: mysqldefault-value

解决方案


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      |

推荐阅读