-1

我从内部连接中得到了奇怪的结果。这是SQL:

SELECT  cm.PersonID
FROM dbo.vwCommitteeMembers cm

-- first join
INNER JOIN dbo.vwCommitteeTerms ct 
      ON (ct.CommitteeID = cm.CommitteeID)

-- second join
INNER JOIN dbo.vwCommitteeTermMembers ctm 
      ON (ct.ID = ctm.CommitteeTermID)

WHERE cm.CommitteeID = 124

如果我注释掉两个连接,我会得到 24 个结果。如果我取消注释第一个加入(留下第二个注释),我也会得到 24 个结果。但是,如果两个连接都未注释,则结果将膨胀到 576。由于24^2 = 576,我知道发生了什么,但我不知道为什么。我在 Windows 7 Pro x64 工作站上将 SQL Server Management Studio 2008 用于 SQL Server 2008 数据库。它“感觉”就像 SSMS 试图以某种方式优化我的查询,但我真的很想知道根本原因是什么,所以我以后不会遇到这个问题(因为这不是我第一次遇到它) . 我什至让一位同事看了一下,因为我认为我只是“离问题太近了”,他们也认为这看起来还不错。

谢谢!

4

1 回答 1

2

拉马克的第二条评论是正确的。当查询修改为:

SELECT  cm.PersonID
FROM dbo.vwCommitteeMembers cm

-- first join
INNER JOIN dbo.vwCommitteeTerms ct 
      ON (ct.CommitteeID = cm.CommitteeID)

-- second join
INNER JOIN dbo.vwCommitteeTermMembers ctm 
      ON (ct.ID = ctm.CommitteeTermID AND ctm.MemberID = cm.PersonID)

WHERE cm.CommitteeID = 124
于 2012-07-18T21:15:19.830 回答