SQL:处理空值(联合)



给定这两个类似的查询:

SELECT EXTRACT(YEAR FROM to_date) AS year_expired
        FROM     salaries
        GROUP BY year_expired
        ORDER BY year_expired

(
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字段中提供具有 NULL 值的行,而在第二个查询中没有 NULL 行。

您可以在此处查看示例。

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

UNION 如何处理 NULL 值,GROUP BY 如何处理 NULL 值?

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

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

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

PS:我正在使用PostgresSQL。

这与

UNION无关。 您将使用 WHERE 子句筛选出NULL值。

这两个查询并不相同。

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

相关内容

  • 没有找到相关文章