这看起来很简单,但我找不到任何东西。任何帮助表示赞赏。
我有一个包含多个列的表。我需要将这些列中的一些列相互比较并删除它们彼此匹配的行或者为NULL。换句话说,我需要将行保留在除NULL之外的其他区域。 (如果重要的话,我会对比较不同数量的列的表运行几次,有时会列很多列,因此那些只关注三列的查询将无效。)
所以,如果我的表是:
ID TITLE VALUE_1 VALUE_2 VALUE_3
1 One AAA NULL NULL
2 Two NULL AAA AAA
3 Three AAA AAA AAA
4 Four NULL NULL NULL
5 Five AAA BBB CCC
6 Six AAA BBB NULL
7 Seven NULL DDD EEE
8 Eight AAA AAA BBB
运行查询后,我想要
ID TITLE VALUE_1 VALUE_2 VALUE_3
5 Five AAA BBB CCC
6 Six AAA BBB NULL
7 Seven NULL DDD EEE
8 Eight AAA AAA BBB
再次感谢您的时间。
答案 0 :(得分:3)
select * from table
where v1 <> v2 or v1 <> v3 or v2 <> v3
这将返回任何一对都有TRUE
的行。因此,使用NOT IN
包围该谓词将提供所需的删除设置:
delete t where id not in(select id from t where v1 <> v2 or v1 <> v3 or v2 <> v3)
答案 1 :(得分:1)
Delete from tablename
where (Value_1 is Null And value_2 is null)
or (Value_2 is Null And value_3 is null)
or (Value_1 is Null And value_3 is null)
or (Value_1 = value_2)
or (Value_1 = value_3)
or (Value_3 = value_2)
如果有两列null或任何两列匹配,则应该能够删除。如果您想知道
,sql server中没有字符串比较功能答案 2 :(得分:0)
您可以在ISNULL
声明
DELETE
Where IsNull (Value_1, 'SomeValueThatWillNeverBeInTheTable') = IsNull (Value_2, 'SomeValueThatWillNeverBeInTheTable')