如何过滤SQL表中两列文本完全相同的行,保留差异行?
解决SQL中保留两列值不同行的高效方法
首先明确:DISTINCT之所以没用,是因为它用来移除整行完全重复的记录,而你要的是基于Column1和Column2的值是否不同来过滤,和其他列是否重复无关,所以这个命令不适用。
最直接高效的方法就是用WHERE子句直接过滤,语法简单且性能最优(数据库可直接利用列上的索引快速筛选):
基础版(适用于无NULL值的情况)
如果你的Column1和Column2都不会出现NULL值,直接用不等判断即可:
SELECT * FROM your_table WHERE Column1 <> Column2;
兼容NULL值的版本
SQL中NULL和任何值(包括另一个NULL)比较都会返回UNKNOWN,所以需要额外处理场景:
- 若认为一列是NULL、另一列非NULL属于“值不同”要保留,而两列都是NULL属于“值相同”要过滤,用这个条件:
SELECT * FROM your_table WHERE NOT (Column1 = Column2 OR (Column1 IS NULL AND Column2 IS NULL));
- 若认为**只要两列不相等(含其中一个是NULL)**都要保留,甚至两列都是NULL也保留,用这个:
SELECT * FROM your_table WHERE Column1 <> Column2 OR Column1 IS NULL OR Column2 IS NULL;
这个方法逻辑清晰,执行效率高——数据库可直接对Column1和Column2做条件筛选,不需要额外子查询或聚合操作,完全适配基础SQL知识储备。
内容的提问来源于stack exchange,提问作者BigE
相关产品推荐
相关产品推荐

