Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1703227
  • 博文数量: 136
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3261
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-22 11:26
文章分类

全部博文(136)

文章存档

2010年(1)

2009年(26)

2008年(109)

我的朋友

分类: Oracle

2008-07-02 13:56:46

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 最后的返回结果集是去掉了所有的重复记录,而不区分是哪个表里的记录的。做报表,这是很容易出错的一点。
阅读(2280) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~