内联合产生错误的结果,没有明确的理由

时间:2012-07-18 20:59:42

标签: sql-server ssms

我从内部联接得到奇怪的结果。这是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试图以某种方式优化我的查询,但我真的想知道根本原因是什么,所以我将来没有这个问题(因为这不是我第一次遇到它) 。我甚至让一位同事看了一眼,因为我认为我只是“太接近”了问题,他们认为它看起来还不错。

谢谢!

1 个答案:

答案 0 :(得分:2)

Lamak的第二条评论是正确的。将查询修改为:

时会产生预期结果
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