当我运行此Sql查询时,我收到此错误。
“子查询返回的值超过1。当这个值不允许时 子查询跟随=,!=,<,< =,>,> =或当子查询用作 表达。“
我在我的where条件下使用IN,所以当从子查询返回多于1个值时,我不确定问题是什么。
如果我删除CASE语句并且只运行
<body style="background-image: url(../../Views/Home/pexels-photo-955470.jpeg)">
</body>
然后它运作正常。
任何帮助将不胜感激。
WHERE MCO_ID IN(SELECT MCO_ID FROM @ALL_MCO)
答案 0 :(得分:1)
在SQL CASE
中是一个返回单个标量值的表达式。它不能像过程语言一样用来控制执行流程。
您可以尝试重写WHERE
子句,如下所示:
WHERE
(@MCO = '99' AND MCO_ID IN (SELECT MCO_ID FROM @ALL_MCO))
OR
(@MCO != '99' AND MCO_ID = @MCO)
答案 1 :(得分:1)
您的 子句没有意义(至少对我而言),但您可以使用exists
代替
SELECT *
FROM TEST_TABLE t
WHERE (@MCO = 99 AND EXISTS (SELECT 1 FROM @ALL_MCO WHERE MCO_ID = t.MCO_ID)) OR
(@MCO <> 99 AND MCO_ID = @MCO);
但是,@MCO
变量的类型为INT
,因此您不需要使用单引号
答案 2 :(得分:1)
试试这个:
SELECT *
FROM TEST_TABLE
--WHERE MCO_ID IN( CASE WHEN @MCO ='99' THEN (SELECT MCO_ID FROM @ALL_MCO) ELSE @MCO END)
WHERE (@MCO ='99' AND MCO_ID IN (SELECT MCO_ID FROM @ALL_MCO))
OR (@MCO !='99' AND MCO_ID = @MCO)
答案 3 :(得分:1)
这可能是你打算做的?
DECLARE @MCO INT
SET @MCO ='99'
DECLARE @ALL_MCO TABLE
(
MCO_ID 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 = '99' AND MCO_ID IN (SELECT MCO_ID FROM @ALL_MCO))
OR (@MCO <> '99' AND MCO_ID = @MCO)