如何在SQL中筛选多列值存在差异的行?
如何筛选SQL表中多列值存在差异的行?
假设你的表名为locations,包含LocationA、LocationB、LocationC三列,要返回这三列值不全相同的行,可以用以下几种实用方法:
方法一:直接比较列间的不等关系
通过判断任意两列是否不相等,只要满足其中一个条件就返回该行:
SELECT * FROM locations WHERE LocationA != LocationB OR LocationA != LocationC OR LocationB != LocationC;
逻辑很直观:只要有两列值不同,就说明该行存在差异,完全匹配你的需求。
方法二:利用聚合函数统计不同值数量
如果后续可能增加更多列,这种方法更易扩展,无需修改多个OR条件:
SELECT * FROM locations WHERE ( SELECT COUNT(DISTINCT val) FROM (VALUES (LocationA), (LocationB), (LocationC)) AS temp(vals) ) > 1;
子查询会把当前行的三个列值转换成临时表,统计其中不同值的数量。如果数量大于1,说明该行存在差异,将被筛选出来。
示例验证
针对你给出的测试数据:
LocationA, LocationB, LocationC
US, US, US ---------------> 三列值全相同,不会被返回
US, IN, US ---------------> LocationB与其他列不同,会被返回
IN, US, IN ---------------> LocationB与其他列不同,会被返回
两种方法都会返回Row2和Row3,满足你的要求。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

