我有一个名为 TEST 的表。某些字段具有 NULL 值
Country City Street House
US NULL Avenue 14
UK London NULL 15
NULL NULL NULL NULL
NULL NULL Central 16
我需要显示只有一个 NULL 的项目。
所以输出应该是:
Country City Street House
US NULL Avenue 14
UK London NULL 15
我有一个愚蠢的解决方案,只是比较所有可能的列对并检查 NULL。
就像这样:
SELECT * FROM TEST
WHERE NOT (
(country='NULL' AND city='NULL')
OR (country='NULL' AND street='NULL')
OR (coutry='NULL' AND house='NULL')
OR (city='NULL' AND street='NULL')
OR (city='NULL' AND house='NULL')
OR (street='NULL' AND house='NULL')
)
它有效,但要明白它的效率非常低。
你能推荐更优雅的解决方案吗?
最佳答案
select * from TEST
WHERE
CASE WHEN country = 'NULL' THEN 1 ELSE 0 END
+ CASE WHEN city= 'NULL' THEN 1 ELSE 0 END
+ CASE WHEN Street = 'NULL' THEN 1 ELSE 0 END
+ CASE WHEN House = 'NULL' THEN 1 ELSE 0 END = 1
关于sql - 在一行中查找重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37565818/