Я работаю со следующим запросом:не позволяет несколько СЛУЧАЯ подзапроса результатов при использовании 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
)
первом случае выберите возвращают выписки только один b.ID
. Если у меня просто есть это утверждение, мой код работает.
Второй оператор case, однако, возвращает несколько 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
, так почему он жалуется, если возвращено несколько значений?
Как я могу реализовать этот вид чека?
'CASE' в T-SQL является ** выражением ** (например,' a + b'), которое возвращает ** одиночное, атомное значение ** - вы ** не можете использовать его для выборочного запуска SQL-фрагментов которые возвращают целые результирующие наборы ... –
@marc_s Я предполагаю, что эта ошибка попадет в категорию *, когда подзапрос используется как выражение *. Есть ли у вас какие-либо предложения о том, как я могу выполнять этот вид проверки, не используя 'CASE', или каким-то образом позволяя несколько результатов? –
Возможно, [это] (http://stackoverflow.com/a/10260297/92546) ответ предложит некоторые идеи. – HABO