在声明中不接受选择?

时间:2017-09-24 22:42:06

标签: sql

如果我有:

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 个答案:

答案 0 :(得分: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);