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