如何实现SQL中存在指定记录时选A、不存在时选B的逻辑?
实现「存在指定记录选A、不存在选B」的SQL逻辑
先看你现有的SQL:
SELECT * FROM [x] WHERE EXISTS ( SELECT * from [x] WHERE FileName = 'xxxx') AND FileName = 'xxxx'
这段代码其实等价于直接SELECT * FROM [x] WHERE FileName = 'xxxx'——只要存在FileName='xxxx'的记录,就返回该记录;如果不存在,整个查询返回空,完全没处理「不存在时选B」的分支逻辑。
根据不同的业务需求,给你几种常用的实现方式:
场景1:存在指定记录时返回该记录(A),不存在时返回表中其他记录(B)
用UNION ALL结合EXISTS判断分支:
-- 先查符合条件的记录(A) SELECT * FROM [x] WHERE FileName = 'xxxx' UNION ALL -- 当不存在符合条件的记录时,返回其他所有记录(B) SELECT * FROM [x] WHERE NOT EXISTS (SELECT * FROM [x] WHERE FileName = 'xxxx')
场景2:仅返回标记值(存在返回'A',不存在返回'B')
用CASE表达式直接生成结果:
SELECT CASE WHEN EXISTS (SELECT * FROM [x] WHERE FileName = 'xxxx') THEN 'A' ELSE 'B' END AS Result
场景3:存在指定记录时返回该记录,不存在时返回自定义默认行
如果B是固定的默认值而非表中数据,可以这么写:
-- 优先返回目标记录(A) SELECT * FROM [x] WHERE FileName = 'xxxx' UNION ALL -- 不存在目标记录时返回默认行(B),注意列数、数据类型要和表[x]匹配 SELECT '默认文件名' AS FileName, '默认内容' AS Content, 0 AS Id WHERE NOT EXISTS (SELECT * FROM [x] WHERE FileName = 'xxxx')
内容的提问来源于stack exchange,提问作者TariqX
相关产品推荐
相关产品推荐

