希望有人能够解决这个困境。我该如何解决这个问题,以及为什么 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);
不确定为什么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)
;