国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQL Server里的INTERSECT ALL

2024-08-31 00:54:07
字體:
來源:轉載
供稿:網(wǎng)友
SQL Server里的INTERSECT ALL

在上一篇文章里,我討論了INTERSECT設置操作的基礎,它和INNER JOIN的區(qū)別,還有為什么需要好的索引設計支持。今天我想談下SQL Server里并未實現(xiàn)的INTERSECT ALL操作。

INTERSECT ALL是SQL特性的一部分,但SQL Server并不考慮它。和INTERSECT操作的區(qū)別非常簡單:INTERSECT ALL不會剔除重復行。在SQL Server里的好處是你可以模擬INTERSECT ALL。我們來試下,再次創(chuàng)建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

你會發(fā)現(xiàn),第2個表包含重復記錄——在表里值為2的記錄出現(xiàn)了2次。現(xiàn)在當你在2個表之間進行INTERSECT,值為2的記錄在結果集只出現(xiàn)1次。重復行被剔除了。

如果你想保留重復行,你必須使它們唯一。這里的一個方法是使用自SQL Server 2005后引入的ROW_NUMBER()窗口函數(shù)。使用這個函數(shù)你為每個重復記錄生成唯一的行號。因此你的重復記錄變成了唯一,“重復”行如期望的返回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() 計算。

感謝關注!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 东乡| 郎溪县| 七台河市| 蓬莱市| 巴林左旗| 开化县| 南澳县| 富民县| 勃利县| 台东市| 依兰县| 平遥县| 汉源县| 蒲江县| 天峨县| 鹤峰县| 上蔡县| 上犹县| 古交市| 曲阳县| 临夏县| 新民市| 隆尧县| 含山县| 鄱阳县| 夏邑县| 万载县| 荆门市| 璧山县| 三原县| 鲁甸县| 利津县| 沧州市| 井研县| 明水县| 景洪市| 任丘市| 寻甸| 岱山县| 三明市| 宿州市|