-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 個の結果が得られます。最初の結合のコメントアウトを解除すると (2 番目の結合はコメントアウトしたままにする)、24 の結果も得られます。ただし、両方の結合がコメント化されていない場合、結果は576に膨らみます。SQL Server 2008 データベース用に、Windows 7 Pro x64 ワークステーションで SQL Server Management Studio 2008 を使用しています。SSMS が何らかの方法でクエリを最適化しようとしているように感じますが、根本的な原因を知りたいので、今後この問題は発生しません (これが初めてではないため)。 . 私は問題に「近すぎる」と思っていたので、同僚にも見てもらいましたが、彼らも問題ないようだと思っていました。

ありがとう!

4

1 に答える 1

2

Lamak の 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 に答える