【发布时间】:2019-04-08 13:39:31
【问题描述】:
我的查询中有四列。我的要求是检查所有列的值是否不同,然后只选择结果。
我已经编写了这个查询,它工作正常。但我只是想知道是否有更好或更快捷的方法来实现这一目标
select FO, AFO, CO, ACO from mytable
where
(fo<>afo or (fo is null or afo is null))
and
(fo<>co or (fo is null or co is null))
and
(fo<>aco or (fo is null or aco is null))
and
(afo<>co or (afo is null or co is null))
and
(afo<>aco or (afo is null or aco is null))
and
(co<>aco or (co is null or aco is null))
【问题讨论】:
-
能否提供一组示例数据,您对预期结果的描述有点混乱。
-
@PawanNogariya 你能上传一些示例数据和输出吗
-
就快捷方式而言(假设您的列是 varchar 类型)(foafo or (fo is null or afo is null))可以写成 COALESCE(fo, 'fo' ) COALESCE(afo, 'afo')
-
@DimiTakis 这不是一个好主意。即使列上有索引,这也会强制进行全表扫描
-
@PanagiotisKanavos 哦,好吧,不同意这一点 - 两者的查询计划是相同的 - 只要在你身边尝试,你就会看到
标签: sql sql-server tsql sql-server-2008