Sql server self-join是如何工作的?(sql小姐)

Sql server self-join是如何工作的?(sql小姐),sql-server,tsql,inner-join,self-join,Sql Server,Tsql,Inner Join,Self Join,此结果集如何/为什么:(返回1215条记录) 与此不同:(返回1203条记录) 第一个查询的连接条件不应该确保两个查询的结果集相同吗?TIA我可以看出唯一的原因:您的行具有相同的UCN\U组值。如果将第一个查询更改为SELECT DISTINCT,会发生什么情况?将DISTINCT添加到第一个查询会导致具有相同数量的记录(1203)。为什么会发生这种事?同意。为什么行数不相等?因为您在具有相同值的行之间创建笛卡尔积。@Barmar是正确的。简言之,join做了两件事:a)将表1中的每一行配对到表

此结果集如何/为什么:(返回1215条记录)

与此不同:(返回1203条记录)


第一个查询的连接条件不应该确保两个查询的结果集相同吗?TIA

我可以看出唯一的原因:您的行具有相同的
UCN\U组
值。

如果将第一个查询更改为
SELECT DISTINCT
,会发生什么情况?将DISTINCT添加到第一个查询会导致具有相同数量的记录(1203)。为什么会发生这种事?同意。为什么行数不相等?因为您在具有相同值的行之间创建笛卡尔积。@Barmar是正确的。简言之,join做了两件事:a)将表1中的每一行配对到表2中的每一行b)仅输出满足ON条件的那些配对。阅读这篇文章了解连接是如何工作的也许你可以通过一个简单的演示来增强你的答案,使用一个3-4行的表。@Isantipov因为它是一个自连接,我从a&b那里得到的理解是我将获得相同数量的记录。我很抱歉,但我的新手头脑无法理解为什么记录会被复制。无论如何,谢谢你花时间回答。我真的很感激你们!
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%'
SELECT UM2.UCN_Group, UM2.UCN, UM2.Cust_EDP 
FROM CleanRoom.dbo.UCN_Master AS UM2 
WHERE UM2.UCN_Group NOT LIKE 'EXPN%'