子查询返回的值超过1个.4 ...不同的查询

时间:2017-12-06 16:28:09

标签: mysql

您好我有这个查询我正在尝试执行并且我一直收到此错误"子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。",请帮助。

DECLARE @NUMCOUNT BIT

Select @NUMCOUNT = (SELECT 
CASE WHEN 


(SELECT COUNT(R5REQUISLINES.RQL_REQ) 

       WHERE R5REQUISLINES.RQL_STATUS IN ('A')
       ) IN 
(SELECT   COUNT(R5REQUISLINES.RQL_REQ)  

       WHERE R5REQUISLINES.RQL_STATUS IN ( 'A','C') ) THEN 1 else  0 END AS NUMCOUNT1
       FROM         R5REQUISLINES JOIN
                      R5REQUISITIONS ON R5REQUISLINES.RQL_REQ = R5REQUISITIONS.REQ_CODE

       GROUP BY R5REQUISLINES.RQL_REQ, R5REQUISITIONS.REQ_CODE,R5REQUISLINES.RQL_STATUS

 )

IF @NUMCOUNT = '1'

begin

UPDATE R5REQUISITIONS

SET R5REQUISITIONS.REQ_STATUS = 'CP'

end

2 个答案:

答案 0 :(得分:0)

好吧,当R5REQUISITIONS中没有RQL_STATUS = 'C'时,听起来实际想要做的就是更新R5REQUISLINES,因为你说你想要计算RQL_STATUS为A的记录以及A或C的记录,然后在计数相同的情况下进行更新。您可以使用以下查询大大简化此任务:

UPDATE r5
SET r5.REQ_STATUS = 'CP'
FROM R5REQUISITIONS r5
WHERE NOT EXISTS (SELECT 1 FROM R5REQUISLINES r5q WHERE r5q.RQL_REQ = r5.REQ_CODE AND r5q.RQL_STATUS = 'C')

答案 1 :(得分:-1)

您的“SELECT CASE”返回的记录超过1条,因此无法分配给@NUMBER。修复子查询只返回您要查找的记录,或者修改它只返回1,并且具有'LIMIT 1'限定条件。

我不知道你的数据是什么样的,所以我不能告诉你为什么你的案例子查询会返回比你想象的更多的记录。

尝试运行它并查看它返回的内容,这可能会告诉你需要知道的问题:

SELECT 
    CASE WHEN
        (SELECT COUNT(R5REQUISLINES.RQL_REQ)
            WHERE R5REQUISLINES.RQL_STATUS IN ('A')
        ) IN 
        (SELECT COUNT(R5REQUISLINES.RQL_REQ)
            WHERE R5REQUISLINES.RQL_STATUS IN ( 'A','C') 
        ) 
        THEN 1 
        ELSE 0 
        END AS NUMCOUNT1
    FROM R5REQUISLINES JOIN
        R5REQUISITIONS ON R5REQUISLINES.RQL_REQ = R5REQUISITIONS.REQ_CODE
    GROUP BY R5REQUISLINES.RQL_REQ, R5REQUISITIONS.REQ_CODE,R5REQUISLINES.RQL_STATUS

如果返回的行数超过1行,那就是问题所在。