Oracle SQL如何排除所有列均为空的行(保留值为0的行)
Oracle SQL 去重并排除全空行的实现
原查询语句
原SQL用于从my_table表中选取多列的去重数据:
SELECT DISTINCT name, age, weight, height FROM my_table
需求说明
需要排除所有列均为空值的行,但值为0.00的行需保留;仅当该行所有列都为空时才进行排除(如示例中的d行,因存在非空列需保留)。
示例输入数据
| name | age | weight | height |
|---|---|---|---|
| a | 10 | 20 | 105 |
| b | 0 | 0 | 0 |
| c | |||
| d | 15 | 110 |
预期输出数据
| name | age | weight | height |
|---|---|---|---|
| a | 10 | 20 | 105 |
| b | 0 | 0 | 0 |
| d | 15 | 110 |
修改后的SQL语句
SELECT DISTINCT name, age, weight, height FROM my_table WHERE NOT (name IS NULL AND age IS NULL AND weight IS NULL AND height IS NULL);
逻辑说明
NOT (name IS NULL AND age IS NULL AND weight IS NULL AND height IS NULL)直接排除所有列均为空的行,精准匹配需求;- 保留原有的
DISTINCT关键字,确保结果去重; - 值为
0的行不属于空值,会被正常保留;存在至少一个非空列的行(如d行)也会被保留。
内容的提问来源于stack exchange,提问作者honeymoon
相关产品推荐
相关产品推荐

