SQL 中的 UNION 与 UNION ALL 不同,UNION 会去掉结果集中的重复记录,而 UNION ALL 会返回合并后的全部结果集。这个我是知道的,但今天使用 UNION 时,还是犯了一个错误:UNION 会去掉结果集中的重复记录,并且不区分这些记录是那个表里的。
比如下面的两个结果集使用 UNION 合并,结果会是什么呢?
-- 表 testa
1
1
2
3
4 -- 表testb
2
3
5
6
7
我以为结果集会是这个:
1
1
2
3
4
5
6
7
因为把表 testb 中与 testa 重复的记录去掉了。而实际测试结果不是这样的:
SQL> select * from testa;
A
----------
1
2
3
4
1
SQL> select * from testb;
A
----------
2
3
5
6
7
SQL> select a from testa
2 union
3 select a from testb;
A
----------
1
2
3
4
5
6
7
已选择7行。
UNION 操作也会去掉表 testa 中重复的记录。总之,UNION 最后的返回结果集是去掉了所有的重复记录,而不区分是哪个表里的记录的。做报表,这是很容易出错的一点