2017-09-24 89 views
0

如果我有:在聲明中不接受選擇?

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) 

和它的作品。

但我需要它與過濾器可能不會輸入的考慮。

THANKs提前的傢伙!

+1

'where FFFF.FilterId = FFFF.FilterId'總是true當NULL爲空時執行。目前還不清楚你問什麼。此外,錯誤是明確的,你不能返回超過1個值的情況下statemen。添加數據樣本的預期結果 – Horaciux

+0

如果@filterIds有0行,我想要返回所有內容 – NoOne

+0

我也試過了: AND FFF.FilterId IN(COALESCE((Select FilterId from @filterIds),FFFF.FilterId)) – 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

說錯語法在選擇附近。 – NoOne