SQL - 使用 Union 的注意事项


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 最后的返回结果集是去掉了所有的重复记录,而不区分是哪个表里的记录的。做报表,这是很容易出错的一点

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3