博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server里的INTERSECT ALL
阅读量:6704 次
发布时间:2019-06-25

本文共 1345 字,大约阅读时间需要 4 分钟。

在上一篇文章里,我讨论了。今天我想谈下SQL Server里并未实现的INTERSECT ALL操作。

INTERSECT ALL是SQL特性的一部分,但SQL Server并不考虑它。和INTERSECT操作的区别非常简单:INTERSECT ALL不会剔除重复行。在SQL Server里的好处是你可以模拟INTERSECT ALL。我们来试下,再次创建2个表,并插入一些行。 

1 -- Create the 1st table 2 CREATE TABLE t1 3 ( 4     Col1 INT, 5     Col2 INT, 6     Col3 INT 7 ) 8 GO 9 10 -- Create the 2nd table11 CREATE TABLE t212 (13     Col1 INT,14     Col2 INT15 )16 GO17 18 -- Insert some records into both tables19 INSERT INTO t1 VALUES (1, 1, 1), (2, 2, 2), (2, 2, 2), (3, 3, 3)20 INSERT INTO t2 VALUES (2, 2), (2, 2), (3, 3)21 GO

你会发现,第2个表包含重复记录——在表里值为2的记录出现了2次。现在当你在2个表之间进行INTERSECT,值为2的记录在结果集只出现1次。重复行被剔除了。

如果你想保留重复行,你必须使它们唯一。这里的一个方法是使用自SQL Server 2005后引入的ROW_NUMBER()窗口函数。使用这个函数你为每个重复记录生成唯一的行号。因此你的重复记录变成了唯一,“重复”行如期望的返回2次。下列代码显示了这个技术:

1 -- You can preserve duplicate rows by making them unique with the ROW_NUNBER() Windowing Function. 2 WITH IntersectAll AS 3 ( 4     SELECT 5         ROW_NUMBER() OVER (PARTITION BY Col1, Col2 ORDER BY (SELECT 0)) AS RowNumber, 6         Col1, 7         Col2 8     FROM t1 9 10     INTERSECT11 12     SELECT13         ROW_NUMBER() OVER (PARTITION BY Col1, Col2 ORDER BY (SELECT 0)) AS RowNumber,14         Col1,15         Col216     FROM t217 )18 SELECT Col1, Col2 FROM IntersectAll19 GO

小结

SQL Server里INTERSECT操作的一个副作用是重复行会剔除不会在结果集里返回。如果你想保留它们,你需要使它们唯一,例如应用ROW_NUMBER() 计算。

感谢关注! 

参考文章:

转载地址:http://fcflo.baihongyu.com/

你可能感兴趣的文章
naotu.baidu.com 非常棒的脑图在线工具
查看>>
MOSS中创建自定义内容类型
查看>>
将不确定变为确定~Razor视图中是否可以嵌套JS代码
查看>>
[LeetCode] Shortest Word Distance 最短单词距离
查看>>
配置Tomcat以Debug模式启动了,但却只能本地用localhost连接调试
查看>>
“HTTP Status 404 - No result defined for action ****** and result result”错误解决方法
查看>>
PostgreSQL参数学习:wal_keep_segments
查看>>
[自己动手玩黑科技] 1、小黑科技——如何将普通的家电改造成可以与手机App联动的“智能硬件”...
查看>>
Phonegap 通知 Notification
查看>>
3.2. 用户认证
查看>>
ORACLE 9i卸载并重新安装
查看>>
[Python]Hamming distance 问题
查看>>
详解游标
查看>>
[CareerCup] 3.1 Implement Three Stacks using Array 使用数组来实现三个栈
查看>>
《xUnit Test Patterns》学习笔记5 - xUnit基础
查看>>
Linux下锁定账号,禁止登录系统的设置总结
查看>>
STM32启动过程解析-2.02固件库启动文件分析
查看>>
PLSQL Developer设置及快捷键设置
查看>>
《深入浅出MFC》笔记(四)
查看>>
第 15 章 Div+CSS页面设计
查看>>