在mysql中如何使用union和union all处理null?

nzk0hqpo  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(1662)

基于以下陈述

select null
union
select null

上述语句的输出为:

null

虽然这句话:

select null
union all
select null

输出:

null
null

作为 null <> null 那么在这里如何处理null值,以及在哪个数据类型中考虑它

wnavrhmk

wnavrhmk1#

UNION 是一个set运算符,涉及检查“重复行”。规范将重复行定义为“不不同”,将不同行定义为:
如果两个值中的任何一个都是空值,或者根据子条款8.2,“”,它们比较相等,则称这两个值是不不同的。否则它们是不同的。如果两行(或部分行)各自的值对中至少有一对是不同的,则两行(或部分行)是不同的。否则它们就没有区别。评估两个值或两行是否不同的结果从来都不是未知的。
(我的)。所以,在这个例子中:

select null
union all
select null

这两行被认为是彼此重复的,因为第一列中的空值被认为是不同的。。。i、 e.相同。根据定义 UNION 只返回一组重复行中的一行。

n7taea2i

n7taea2i2#

在标准sql中, UNION 删除重复记录, UNION ALL 没有。很高兴你的rdbms足够聪明,可以解决这个问题 NULL IS NULL ,并在 UNION 已使用。
注意: null = nullunknown 然而 null <> nullunknown 也。检查无效性的唯一方法是使用 IS NULL .

SELECT case when null <> null then 1 else 0 end;  --> yields : 0
SELECT case when null =  null then 1 else 0 end;  --> yields : 0
SELECT case when null IS null then 1 else 0 end;  --> yields : 1
9njqaruj

9njqaruj3#

我认为您知道union(重复数据消除结果)和union all之间的区别

select 'x' from dual where null is null \\results with x

在本例中,null实际上是null。这意味着union返回正确的结果(已消除重复)

相关问题