UNION 是一个set运算符,涉及检查“重复行”。规范将重复行定义为“不不同”,将不同行定义为: 如果两个值中的任何一个都是空值,或者根据子条款8.2,“”,它们比较相等,则称这两个值是不不同的。否则它们是不同的。如果两行(或部分行)各自的值对中至少有一对是不同的,则两行(或部分行)是不同的。否则它们就没有区别。评估两个值或两行是否不同的结果从来都不是未知的。 (我的)。所以,在这个例子中:
select null
union all
select null
这两行被认为是彼此重复的,因为第一列中的空值被认为是不同的。。。i、 e.相同。根据定义 UNION 只返回一组重复行中的一行。
在标准sql中, UNION 删除重复记录, UNION ALL 没有。很高兴你的rdbms足够聪明,可以解决这个问题 NULL IS NULL ,并在 UNION 已使用。 注意: null = null 是 unknown 然而 null <> null 是 unknown 也。检查无效性的唯一方法是使用 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
3条答案
按热度按时间wnavrhmk1#
UNION
是一个set运算符,涉及检查“重复行”。规范将重复行定义为“不不同”,将不同行定义为:如果两个值中的任何一个都是空值,或者根据子条款8.2,“”,它们比较相等,则称这两个值是不不同的。否则它们是不同的。如果两行(或部分行)各自的值对中至少有一对是不同的,则两行(或部分行)是不同的。否则它们就没有区别。评估两个值或两行是否不同的结果从来都不是未知的。
(我的)。所以,在这个例子中:
这两行被认为是彼此重复的,因为第一列中的空值被认为是不同的。。。i、 e.相同。根据定义
UNION
只返回一组重复行中的一行。n7taea2i2#
在标准sql中,
UNION
删除重复记录,UNION ALL
没有。很高兴你的rdbms足够聪明,可以解决这个问题NULL IS NULL
,并在UNION
已使用。注意:
null = null
是unknown
然而null <> null
是unknown
也。检查无效性的唯一方法是使用IS NULL
.9njqaruj3#
我认为您知道union(重复数据消除结果)和union all之间的区别
在本例中,null实际上是null。这意味着union返回正确的结果(已消除重复)