我有一个包含几列的表格。我需要将其中一些列相互比较,并删除它们相互匹配或为 NULL 的行。换句话说,我需要只保留存在除 NULL 之外的差异的行。 (如果重要的话,我将针对要比较的列数不同的表运行几次,有时是非常多的列,因此只关注三列的查询将不起作用。)
所以,如果我的 table 是:
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
最佳答案
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)
这是 fiddle http://sqlfiddle.com/#!3/ea7172/8
关于sql - 查询删除列匹配或为 NULL 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30403844/