mysql - 如果未找到特定记录,则 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
我如何实现这一目标?我需要更改表结构吗?
解决方案
与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 |
推荐阅读
- java - Object Class (polymorphism, casting)
- python - 如何为我的类定义一个迭代器类?
- reactjs - Django Rest Framework 请求在除一个地址之外的所有地址上都未经授权
- logging - 在码头请求日志中编辑密码
- wordpress - 使用托管在本地主机上的 ngrok + wordpress
- python - 关于树蟒的角度
- azure - 如何在 CI/CD 管道 Azure DevOps 中排除 .pdb 文件
- android - AOSP 构建中的锁屏时钟使用哪种字体
- gitlab - 如何为 Gitlab 指定 pre-commit --from-ref?
- android - react-native run-android:此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 7.0 不兼容