我很難看到一個sql查詢。sql查詢混淆
在查詢中,我有一個結果集,就像這樣:
FooId Name Value SourceLevel SourceId RecordId
-----------------------------------------------------------------
1 'Foo' 10 1 0 1
1 'Foo' 25 3 1 2
2 'Bar' 33 1 0 3
對該查詢,我傳遞參數@ Level1Level,@ Level2Level,@ Level3Level,並@ Level1Id,@ Level2Id,@ Level3Id
(不,這些不是真名,但它們說明了我的觀點)。
我的查詢試圖做一個過濾器是這樣的:
WHERE ((SourceLevel = @Level1Level AND SourceId = @Level1Id)
OR (SourceLevel = @Level2Level AND SourceId = @Level2Id)
OR (SourceLevel = @Level3Level AND SourceId = @Level3Id))
如果我在傳遞參數,像這樣:
@Level1Level = 1, @Level2Level = 2, @Level3Level = 3
@Level1Id = 0, @Level2Id = 3, @Level3Id = 2
我想recordIds 1和3回。
但是,如果我在傳遞參數,像這樣:
@Level1Level = 1, @Level2Level = 2, @Level3Level = 3
@Level1Id = 0, @Level2Id = 3, @Level3Id = 1
我想recordIds 2和3回。不幸的是,在第二種情況下,我收回了所有3條記錄,這是合理的,因爲我的where子句中有OR。我無法弄清楚如何限制我的結果集說「如果我還沒有匹配SourceLevel 2或3,只選擇SourceLevel 1」。
任何人有任何想法,假設這有什麼意義?
爲了澄清:我希望每個FooId從我的結果集,但唯一可用的最具體的FooId的基礎上,SourceLevel參數傳入
您的樣品數據是否正確?第一行和第三行的'SourceLevel'和'SourceId'值相同。 – Tony 2010-12-13 22:14:21
是的,他們是不同的FooIds ...我想要結果中的每個FooId,但只有基於SourceLevel的最具體的FooId。 – Jonas 2010-12-13 22:15:38
我明白了,但是RecordID 1和3的SourceLevel和SourceID完全一樣。如果您使用SourceLevel和SourceID來區分,您將始終獲得兩行。另請參閱Bugai13的答案,他列出了可能的組合。 – Tony 2010-12-13 22:19:29