私は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バックをしたいと思います。残念ながら、2番目のケースでは、3つのレコードすべてを元に戻しています。これは、where句のORのために意味があります。 "SourceLevel 2または3でまだ一致していなければ、SourceLevel 1のみを選択する"と言うように結果セットを制限する方法を理解できません。
これは何らかの意味があるとすれば、誰でも考えていますか?明確にするために
:私は私の結果セットから各FooIdをしたいが、渡されたSourceLevelパラメータに基づいて、利用可能な唯一の最も具体的なFooId、
サンプルデータは正しいですか? 1行目と3行目の 'SourceLevel'と 'SourceId'の値は同じです。 – Tony
はい、彼らは異なったFooIdsです...私は結果にFooIdをそれぞれ必要としますが、SourceLevelに基づいて最も特定のFooIdのみが必要です。 – Jonas
私は理解していますが、RecordID 1と3のSourceLevelとSourceIDはまったく同じです。差別化のためにSourceLevelとSourceIDを使用している場合は、常に両方の行が取得されます。 Bugai13の回答も参照してください。彼は可能な組み合わせをマップしています。 – Tony