2017-09-24 9 views
0

私が持っている場合:In文が受け入れられませんSelect?

select * from Dealer DDDD 
left join Filter FFFF on DDDD.dealer_id = FFFF.DealerId 
WHERE FFFF.FilterId IN (CASE WHEN EXISTS (Select 1 from @filterIds) THEN (Select FilterId from @filterIds) ELSE FFFF.FilterId END) 

@filterIdsはイムテストが2つのレコードを持つテーブル値パラメータです。 nullまたは1つの値しか持たない場合は問題ありませんが、2つ以上の「サブクエリが式として使用されたときにサブクエリが1つ以上の値を返しました。エラー。

私はちょうど持っそれをテストしてみました:

WHERE FFFF.FilterId IN (Select FilterId from @filterIds) 

、それが動作します。

しかし、フィルタが入力されない可能性があるとの考えで、私はそれが必要です。

あらかじめおねがいします!

+1

'FFFF.FilterId = FFFF.FilterId'は常にtrueです.executeはNULLです。あなたが何を求めているかははっきりしていません。また、エラーがクリアされている場合、ステートメントの場合は2つ以上の値を返すことはできません。 – Horaciux

+0

データサンプルに期待される結果を追加します。 Selectの近く。 – NoOne

+0

を持っている場合はすべてのものを返したい – NoOne

答えて

0

caseは、値を返す式です。ほとんどのデータベースでは、比較はスカラー式ではありません。試してみてください:

select * 
from Dealer DDDD left join 
    Filter FFFF 
    on DDDD.dealer_id = FFFF.DealerId 
where not exists (Select 1 from @filterIds) or 
     FFFF.FilterId in (Select FilterId from @filterIds); 
+0

は、不正な構文を言う とFFF.FilterId IN(COALESCE((@filterIdsからFilterIdを選択)、FFFF.FilterId)):私は、私も試した@filterIdsが0行 – NoOne

関連する問題