テーブルからデータを取得しようとしていますが、別のクエリの結果に応じてデータをフィルタリングしている可能性があります。
コードは次のようなものです。
DECLARE @TestTable TABLE(TestID INT)
INSERT INTO @TestTable
SELECT TestID from v_Lookuptable Where SomeID = @input
SELECT DISTINCT
C.[Level],
C.Name
FROM
dbo.CPackage CP
Right outer join @TestTable TT on TT.TestID = CP.TestID
WHERE
AND (TT.TestID is null OR Exists( Select TT.TestID from @TestTable
inner join dbo.CProduct CP on CP.TestID = MT.TestID
where TT.TestID = CP.TestID
))
私の問題は、現在のシナリオ@input
を1として渡すと、上部がいくつかの数値を返すことです:1、2、3
しかし、私が2として合格@input
した場合、一致するものがないため、上部は何も返しません。
一致するものがない場合は、一番下のクエリですべてを返すのでdbo.CPackage
、それ以外の場合は、一致するものだけを返すという考え方ですTestID
。
結合の変更、caseステートメント、using ISNULL
、など、さまざまなことを試しcollasce
ました。また、パーツを削除しようとしましたがTT.TestID is null
、一番上のテーブルが何かを返した場合は機能しますが、もう一度追加すると、すべてが返され、フィルター処理されません。だから私は論理が間違っていることを知っています...私はこれのための正しい論理を理解することができません....:S
出来ますか?私はそれが...だと思います
乾杯ロビン
** 解決 **
結合を削除し、whereフィルターに配置します...
SELECT DISTINCT
C.[Level],
C.Name
FROM
dbo.CPackage CP
WHERE
CP.TestID = coalesce( (select distinct TestID from v_Lookuptable LT
where LT.SomeID = @input), CP.TestID )