卡在单行子查询上,在 SQL 更新语句中返回多行

问题描述 投票:0回答:1

希望有人能够解决这个困境。我该如何解决这个问题,以及为什么 SQL 认为它返回多行。这只是一个应该返回一行的 case 语句,并且 PIDM 是唯一的。

UPDATE SCARF.STUDENT
SET IS_PARENT =
(SELECT 
       CASE WHEN GORSRVR_RESPONSE_1 IS NOT NULL THEN 'N'
       WHEN GORSRVR_RESPONSE_2 IS NOT NULL THEN 'YS'
       WHEN GORSRVR_RESPONSE_3 IS NOT NULL THEN 'YA'
       WHEN GORSRVR_RESPONSE_4 IS NOT NULL THEN 'YB'
       END
FROM 
    GENERAL.GORSRVR, GENERAL.GOBSRVR
WHERE 
    GORSRVR_PIDM = GOBSRVR_PIDM
    AND GORSRVR_PIDM = student.MPIDM
    AND GOBSRVR_NAME = 'SB564'
    AND GORSRVR_NAME = GOBSRVR_NAME
    AND GOBSRVR_COMPLETE_IND = 'Y'
    AND GORSRVR_QUESTION_NO = 1);
sql sql-update subquery case
1个回答
0
投票

不确定为什么exists语句修复了它,但现在它正确更新了。

UPDATE SCARF.STUDENT
SET IS_PARENT =
(SELECT 
       CASE WHEN GORSRVR_RESPONSE_1 IS NOT NULL THEN 'N'
       WHEN GORSRVR_RESPONSE_2 IS NOT NULL THEN 'YS'
       WHEN GORSRVR_RESPONSE_3 IS NOT NULL THEN 'YA'
       WHEN GORSRVR_RESPONSE_4 IS NOT NULL THEN 'YB'
       END
FROM 
    GENERAL.GORSRVR, GENERAL.GOBSRVR
WHERE 
    GORSRVR_PIDM = GOBSRVR_PIDM
    AND GORSRVR_PIDM = MPIDM
    AND GOBSRVR_NAME = 'SB564'
    AND GORSRVR_NAME = GOBSRVR_NAME
    AND GOBSRVR_COMPLETE_IND = 'Y'
    AND GORSRVR_QUESTION_NO = 1)
where exists
    (SELECT 
       CASE WHEN GORSRVR_RESPONSE_1 IS NOT NULL THEN 'N'
       WHEN GORSRVR_RESPONSE_2 IS NOT NULL THEN 'YS'
       WHEN GORSRVR_RESPONSE_3 IS NOT NULL THEN 'YA'
       WHEN GORSRVR_RESPONSE_4 IS NOT NULL THEN 'YB'
       END
FROM 
    GENERAL.GORSRVR, GENERAL.GOBSRVR
WHERE 
    GORSRVR_PIDM = GOBSRVR_PIDM
    AND GORSRVR_PIDM = MPIDM
    AND GOBSRVR_NAME = 'SB564'
    AND GORSRVR_NAME = GOBSRVR_NAME
    AND GOBSRVR_COMPLETE_IND = 'Y'
    AND GORSRVR_QUESTION_NO = 1)
    ;
© www.soinside.com 2019 - 2024. All rights reserved.