当我用下面的查询工作:不给自己留多案例子查询结果使用IN
SELECT *
FROM TableA a
WHERE a.FieldA IN (
CASE
--select subquery returns a single value
WHEN a.FieldB = 'Value1'
THEN (select b.ID from TableB b where b.FK_Field = '123')
--select subquery returns multiple values
WHEN a.FieldB = 'Value2'
THEN (select c.ID from TableC c where c.FK_Field = '123')
END
)
第一种情况SELECT语句只返回一个b.ID
。如果我只是有这样的说法,我的代码就可以工作。
但是,第二种情况说明会返回多个c.ID
s。当我再补充一点检查,我得到以下错误:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
如果我不得不WHERE a.FieldA =
,那么据我所知,子查询只能返回值为1。然而,我有WHERE a.FieldA IN
,那为什么它会抱怨如果有多个值返回?
我该如何实施这种检查?
T-SQL中的CASE是一个**表达式**(如'a + b'),它返回一个**单一的原子值** - 您无法**使用它来选择性地运行SQL片段返回整个结果集... –
@marc_s我想那么这个错误将落入类*当子查询用作表达式*。你有什么建议,我可以做这种检查,而不使用'CASE'或以某种方式允许多个结果? –
也许[这](http://stackoverflow.com/a/10260297/92546)答案将提供一些见解。 – HABO