【发布时间】:2018-04-20 04:56:01
【问题描述】:
当我运行这个 Sql 查询时,我得到了这个错误。
"子查询返回超过 1 个值。当 子查询遵循 =、!=、、>= 或当子查询用作 一个表达式。”
我在 where 条件中使用 IN,所以当它从子查询返回超过 1 个值时,我不确定问题出在哪里。
如果我删除 CASE 语句并使用
WHERE MCO_ID IN(SELECT MCO_ID FROM @ALL_MCO)
然后它就可以正常工作了。
任何帮助将不胜感激。
DECLARE @MCO INT
SET @MCO ='99' -- This will be dynamic variable. I am just setting here for example
DECLARE @ALL_MCO TABLE
(
MCO_VALUE INT
)
INSERT INTO @ALL_MCO VALUES ('1')
INSERT INTO @ALL_MCO VALUES ('2')
INSERT INTO @ALL_MCO VALUES ('3')
SELECT *
FROM TEST_TABLE
WHERE MCO_ID IN (
CASE WHEN @MCO ='99' THEN
(SELECT MCO_VALUE FROM @ALL_MCO)
ELSE
@MCO END
)
【问题讨论】:
-
你想用子查询'SELECT MCO_ID FROM @ALL_MCO'做什么?在这种情况下返回多个值是没有意义的,因此会出现错误。
-
@jp2g 使用 'SELECT MCO_ID FROM ALL_MCO' 我试图获取我在表变量中插入的所有 3 个 MCO_VALUE。我需要那个,因为我将在 MCO 变量中传递多个值。如果我通过“99”,我需要查询所有 MCO 值。在某些情况下,我只会在 MCO 中获得除 99 之外的特定值,因此我想在 else 条件下查询该特定 MCO_VALUE。关于错误。我正在使用 IN 运算符,因此它应该在 WHERE 条件下接受超过 1 个值。
-
我在发帖时出错,并为表变量和条件“MCO_ID”提供了相同的名称。我已将表变量更改为 MCO_VALUE。 (这不是实际查询的错误,只是这里的错字)
标签: sql sql-server