在SQL Server 2008中,我有一种我不理解的行为。
我在两个选择语句之间做UNION
。
当我在两个选项中使用union
时,我得到20740行,我会看到20745,因为union
只返回不同的值。
为了获得例外结果,我使用了union all
,但有一些我不了解它。有人有解释吗?
答案 0 :(得分:2)
您的第一个SELECT
语句中必须有重复的行。请注意,UNION
可以消除结果集中的重复项。
如果要返回所有行,请改用UNION ALL
。
示例:
--UNION ALL
WITH TableA(n) AS (
SELECT * FROM (
VALUES(1),(2),(3),(4),(1)
)t(n)
),
TableB(n) AS (
SELECT * FROM (
VALUES(10),(20),(30),(40)
)t(n)
)
SELECT n FROM TableA UNION ALL
SELECT n FROM TableB
以上将返回:
n
-----------
1
2
3
4
1
10
20
30
40
UNION
变体
SELECT n FROM TableA UNION
SELECT n FROM TableB
将返回:
n
-----------
1
2
3
4
10
20
30
40
答案 1 :(得分:2)
union
会删除重复的结果,无论它们来自两个不同的select
还是来自同一个。union all
。如果您想保留重复的内容,请改用SELECT *
FROM table1
UNION ALL
SELECT *
FROM table2
:
insertRowAtIndexPath
答案 2 :(得分:1)
第一个选择语句有重复:)这是正常行为。
尝试在第一个select语句中添加一个distinct - 它也应该返回20740行。
这应该有助于您更好地了解正在发生的事情。