gpt4 book ai didi

SQL:UNION 是否与带有 UNION ALL 子查询的 SELECT DISTINCT 相同

转载 作者:行者123 更新时间:2023-12-05 08:57:13 26 4
gpt4 key购买 nike

这两条SQL语句在所有场景下都是一样的吗?

SELECT DISTINCT * FROM 
(SELECT * FROM tablename UNION ALL SELECT * FROM tablename2) dummyname

SELECT * FROM tablename UNION SELECT * FROM tablename2

我总觉得 UNION 的一个特别之处在于它会删除所有非不同的行,即使这些非不同的行出现在 UNION 子句的单个部分中。例如,假设表名只有一列:amt INT。假设 amt INT 不是主键并且没有任何唯一约束。然后假设我有两行,其中 amt = 20。无论我使用 UNION,结果集中只会出现这两行中的一行。

我正在向其他人解释这种行为,然后想出了上面的例子来证明 UNION 的行为......我相信上面的两个陈述是相同的(总是),但我只是想确保什么我说的是对的。是否存在上述两个 SQL 语句不会生成完全相同的结果集的极端情况?

最佳答案

这两个版本是相同的:UNION 在功能上等同于 UNION ALL 上的 SELECT DISTINCT

UNION 删除表中的重复值以及两个表之间共享的值。

我应该注意到,从性能的角度来看,以下通常比 UNION 更快:

select distinct t.col1, t.col2
from t
union
select distinct t1.col1, t.col2
from t1;

这可能违反直觉。但是,如果表中的 (col1, col2) 有索引,那么它可以用于 select distinct,减少 的行数>联合。一些优化器可能会错过这个简化输入的机会。

关于SQL:UNION 是否与带有 UNION ALL 子查询的 SELECT DISTINCT 相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34882105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com