首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:处理空值(联合)

SQL:处理空值(联合)
EN

Stack Overflow用户
提问于 2017-06-09 18:33:32
回答 2查看 4.9K关注 0票数 1

考虑到这两个类似的查询:

代码语言:javascript
复制
SELECT EXTRACT(YEAR FROM to_date) AS year_expired
        FROM     salaries
        GROUP BY year_expired
        ORDER BY year_expired

代码语言:javascript
复制
(
SELECT EXTRACT(YEAR FROM to_date) AS year_expired
          FROM salaries
          WHERE EXTRACT (YEAR FROM to_date) > 1990
          GROUP BY year_expired
          ORDER BY year_expired
)
UNION
(
SELECT EXTRACT(YEAR FROM to_date) AS year_expired
          FROM salaries
          WHERE EXTRACT (YEAR FROM to_date) <= 1990
          GROUP BY year_expired
          ORDER BY year_expired
)

第一次查询中的输出在year_expire字段中提供了一个具有空值的行,而在第二个字段中没有空行。

你可以在这里看到这个例子。

我在问自己为什么会这样。GROUP BY是否也接受空值?我知道UNION将表作为一个集合进行威胁,因此它不会选择重复项。

UNION如何处理空值,以及如何按组处理空值?

编辑:我更改了第二个查询(第二列错误)

EDIT2:谢谢你的回答,但是你能解释一下有什么区别吗?我认为这可能是因为WHERE子句:通过比较,如果我们有一个空值,它就会变得未知,这就是WHERE子句不考虑NULL的原因。

你能告诉我至少如果我说的是发生了什么吗?

PS:我在用PostgresSQL。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-09 18:34:54

这与UNION无关。您正在使用NULL子句筛选出WHERE值。

这两个查询并不相同。

票数 3
EN

Stack Overflow用户

发布于 2017-06-20 11:20:38

您在第二个查询中使用比较运算符>,在第二个查询中使用<=,在第一个查询中没有使用筛选器。它不会考虑null > 1990null <= 1990,并将排除这些记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44464628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档