网站首页  |   业界社区  |  电信社区  |  技术社区   |  极客社区  |  游戏社区  |  生活社区   |   科技博客  |   同事录
TechWeb-技术社区


标题: [推荐] SQL - 使用 Union 的注意事项
淋雨了
TW高级会员
Rank: 4



UID 80710
精华 29
积分 915
帖子 434
阅读权限 50
注册 2006-8-8
状态 离线
发表于 2008-7-4 15:11 资料 短消息 加为好友
SQL - 使用 Union 的注意事项

  SQL 中的 UNION 与 UNION ALL 不同,UNION 会去掉结果集中的重复记录,而 UNION ALL 会返回合并后的全部结果集。这个我是知道的,但今天使用 UNION 时,还是犯了一个错误:UNION 会去掉结果集中的重复记录,并且不区分这些记录是那个表里的。TechWeb-技术社区.H&s$x5M/B2e#O
 
4p!P0S&Z!V1~ M$f*i1C:p程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  比如下面的两个结果集使用 UNION 合并,结果会是什么呢?
0T$p+S#{:w;z/[ tech.techweb.com.cn/b-_"x(u2h)@%R'{7^
-- 表 testa3[+j,L'z r/f#A+i3\._
1
:v!n%d {0Z&o程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛1
3},Y,M*h)Z1M'_2
(Y*S"t/[4W*X3
(o9?#C8t-A-w1^4 -- 表testb程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛!D'Q*j&G4\2A-n:[1J
2
6X(f!_1d,Q-L3TechWeb-技术社区/Z;V+g$a.A$Z9_+p5}:h%Q;w+m
5程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛)E1U)a/z!b8Q'l5_;B
6
+X9k7f9_!\4T2D+H6O:p$[tech.techweb.com.cn7
*U [*J/i%@;y8W*U1{*L+xTechWeb-技术社区TechWeb-技术社区&A"~%s%C'J+F"e,p
!F!['S+}5`7k1@"?
  我以为结果集会是这个:
;u.x y)e+\&zTechWeb-技术社区 tech.techweb.com.cn'g0X'v5~,Q8a;G
1*A"J;A-|:N0m8q6G%E&b)b
1+s.d9a1G c8Q1Y
2
&n/N)Q'k'P0f'l/u+w1Q3
%B/M,A,p9t+k!Stech.techweb.com.cn4TechWeb-技术社区0s7V6l#P.s(c"~5o.W2T
5程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛&V.S/b3K.n)q
6
%M-u'I(?1z5x&B,I1w)a"a7F7 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛'f*c1X"u3P.}7y;]
6N6z,K8N+L
TechWeb-技术社区4o3D$V2E0f4q2g9R
  因为把表 testb 中与 testa 重复的记录去掉了。而实际测试结果不是这样的:tech.techweb.com.cn2Q2V;F&`9X;C
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛,F&C2^(T0d0X
SQL> select * from testa;.a+d%v8I8y+B"@5d8m(v
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛#L,I3n2h1L
         A1?.r&~,|:h%P(O
----------TechWeb-技术社区,U v4o,D;V7B$m9|:x/G
         1
7Y0Z1?3r9I程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛         23O$`6G*F!B
         3
!]9]%^*H.q"L3T;lTechWeb-技术社区         4 h/P-M&q9N
         1
4t,P,P!h;|&t9V/u1Ztech.techweb.com.cn %w,P7b:m$j
SQL> select * from testb;8H.Z#y1Z&a1s
8K*F,H2x(Q9n:w'U8V'Z
         A(V%H,I8@9t,q&q,Y9|
----------3F)I)j:@/W'j
         2
#G;Y(Z.x"j+w*[#|2Ltech.techweb.com.cn         3
[6C6v#M$Q%t*x5R:m/V         55q,y2g3O8d'Z:j+}+~
         6
)Y(P:Y)g"B;c$O9L#Dtech.techweb.com.cn         7TechWeb-技术社区1~;Z;}1U)e/?!U5t
tech.techweb.com.cn/i2m.O0|1P;D/Y
SQL> select a from testatech.techweb.com.cn'B2k8y+Q+j A9j-E
  2  union
4|+|.j/g T)t$h  3  select a from testb;tech.techweb.com.cn4w*c7H(Y;O0d2t

e:N6{.p3B,q%^程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛         A
:]/u'?/M |.y#?2c0VTechWeb-技术社区----------
`;F/j3F&C5L h6~/`+K程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛         1TechWeb-技术社区4]2m5L9\;H6Q)u
         2tech.techweb.com.cn&F"?/G#x4z&_!S
         3
$`9\7f7s(g.v4R程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛         4tech.techweb.com.cn2W7D*\ f p1^0n'U7x"f
         5tech.techweb.com.cn7U8\*r'd)\)i
         6
#q.N:t:N$h'y         7'T7E-_&g5O;f3O

%I3J4d:D8\4t)]tech.techweb.com.cn已选择7行。 1{6D%o0H8|,Q6o

2M/N9S!o6u)c*~,~5z
#s"|8H V.E#H8q  UNION 操作也会去掉表 testa 中重复的记录。总之,UNION 最后的返回结果集是去掉了所有的重复记录,而不区分是哪个表里的记录的。做报表,这是很容易出错的一点。

引用 回复 顶部
查看积分策略说明快速回复主题
选项 标题 Smilies
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用匿名发帖
使用个人签名
接收新回复邮件通知
内容





当前时区 GMT+8, 现在时间是 2008-10-8 08:13
京ICP证060517号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2008 Comsenz Inc.
Processed in 0.025896 second(s), 7 queries

清除 Cookies - 联系我们 - TechWeb.com.cn - Archiver - WAP