sql - 在一行中查找重复项

标签 sql

我有一个名为 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/

相关文章:

SQL查询汇总不同表中的字段

python - ODOO 10 多对多

sql - Postgresql - 日期比较

mysql - 在 MYSQL 中使用 NOT IN 和 GROUP CONCAT

MySQL 从单独的表中获取 count()

MySQL:从 SELECT 语句到 INSERT 语句

php - 如何使用PHP检查SQL中表中的最大数字

php - 使用mysql和php的两级邻接表

Mysql准备做2014年每月分区

sql - 作为文本字段的日期操作