2017-09-24 91 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