我很难看到一个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