【问题标题】:how does self-join work? (ms sql)自加入如何工作? (毫秒 sql)
【发布时间】:2026-01-09 22:45:02
【问题描述】:

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

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

【问题讨论】:

  • 如果将第一个查询更改为SELECT DISTINCT会发生什么?
  • 将 DISTINCT 添加到第一个查询会导致具有相同数量的记录 (1203)。为什么会这样?

标签: sql-server tsql inner-join self-join


【解决方案1】:

我可以看到这样做的唯一原因:您的行具有相同的 UCN_Group 值。

【讨论】:

  • 授予。为什么行数不相等?
  • 因为您要在具有相同值的行之间创建笛卡尔积。
  • @Barmar 是正确的。简而言之,连接做了两件事:a)将表 1 中的每一行与表 2 中的每一行配对 b)仅输出符合 ON 标准的那些对。阅读本文以了解连接的工作原理en.wikipedia.org/wiki/Join_(SQL)
  • 也许你可以通过一个简单的演示来增强你的答案,使用一个 3-4 行的表格。
  • @Isantipov 因为它是自加入的,我从 a & b 的理解是我会得到相同数量的记录。我很抱歉,但我的新手头脑无法理解为什么记录被重复。无论如何,感谢您花时间回答。我真的很感激你们!