如果我有:
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)
它有效。
但我需要考虑到过滤器可能没有输入。
提前谢谢你们!
答案 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);