2014-09-03 48 views
0

如何/爲什麼會結果集如此:(返回1215條記錄)自連接如何工作? (MS SQL)

SELECT UM2.UCN_Group, UM2.UCN, UM2.Cust_EDP 
FROM CleanRoom.dbo.UCN_Master AS UM 
    JOIN CleanRoom.dbo.UCN_Master AS UM2 
      ON UM.UCN_Group = UM2.UCN_Group 
WHERE UM.UCN_Group NOT LIKE 'EXPN%' 

是與此不同:(返回1203條記錄)

SELECT UM2.UCN_Group, UM2.UCN, UM2.Cust_EDP 
FROM CleanRoom.dbo.UCN_Master AS UM2 
WHERE UM2.UCN_Group NOT LIKE 'EXPN%' 

不應該的JOIN第一個查詢的條件確保兩個查詢的結果集相同? TIA

+0

如果將第一個查詢更改爲「SELECT DISTINCT」,會發生什麼情況? – Barmar 2014-09-03 21:36:01

+0

將DISTINCT添加到第一個查詢導致具有相同數量的記錄(1203)。爲什麼會發生? – dmbp5237 2014-09-03 22:05:03

回答

2

我可以看到唯一的原因:你有相同的值爲UCN_Group的行。

+0

授予。爲什麼行數不相等? – dmbp5237 2014-09-03 22:06:48

+2

,因爲您在具有相同值的行之間創建笛卡爾積。 – Barmar 2014-09-03 22:07:28

+0

@Barmar是正確的。總之,連接做2件事:a)將表1中的每一行與表2中的每一行進行配對; b)僅輸出符合ON標準的那些對。閱讀這篇文章,瞭解如何加入工作https://en.wikipedia.org/wiki/Join_(SQL) – Isantipov 2014-09-03 22:11:37