如何在现有SQL查询基础上筛选x、y、z三列值相同的返回行
实现代码
你可以直接在外层套一层查询加筛选条件即可,不需要改动原有内部逻辑:
WITH row_source AS (SELECT ........) SELECT a, b, c, x, y, z FROM ( -- 此处保留你原本的查询逻辑 SELECT a,b,c,x,y,z FROM row_source ) AS base_query WHERE x = y AND y = z;
注意事项
- 上述
x = y AND y = z的筛选条件利用等值传递特性,可保证同一行内x、y、z三个列的取值完全相同 - 如果你的场景需要将x、y、z均为NULL的行也判定为取值相同,需要根据你使用的数据库调整条件:
- MySQL:替换条件为
WHERE x <=> y AND y <=> z - PostgreSQL:替换条件为
WHERE x IS NOT DISTINCT FROM y AND y IS NOT DISTINCT FROM z - 通用兼容写法:
WHERE (x = y OR (x IS NULL AND y IS NULL)) AND (y = z OR (y IS NULL AND z IS NULL))
- MySQL:替换条件为
内容的提问来源于stack exchange,提问作者anand
相关产品推荐
相关产品推荐

