如何实现仅当Query1无结果时返回Query2结果的单SQL查询
解决方案:基于EXISTS的条件查询实现
可以用NOT EXISTS子查询来实现需求逻辑,SQL语句如下:
SELECT aa.id FROM A aa JOIN B bb ON aa.id = bb.pid WHERE bb.pid = 10 AND aa.sid IS NULL AND NOT EXISTS ( SELECT aa.id FROM A aa JOIN B bb ON aa.id = bb.pid WHERE bb.pid = 10 AND aa.sid IS NOT NULL );
逻辑说明
- 当Query1(即
NOT EXISTS里的子查询)返回0行结果时,NOT EXISTS判断为真,外层的Query2条件全部满足,会返回对应的数据; - 当Query1有返回结果时,
NOT EXISTS判断为假,外层查询没有符合所有条件的行,因此不会返回任何内容。 - 这种写法完全不需要使用
UNION或COALESCE,仅用单条查询就实现了需求。
内容的提问来源于stack exchange,提问作者lkreinitz
相关产品推荐
相关产品推荐

