根据选择结果更新表

时间:2019-06-26 02:31:32

标签: oracle join sql-update

我有这段代码可以正确获取我想要的值:

SELECT
    cq.CASE_ID,
    cq.FNN_ID,
    fnl.fnn,
    nrfl.RANGE_ID AS NRF2_PROJ_ID,
    ed.OWN_CODE,
    nrft.actioned
FROM CASEQ cq
LEFT JOIN NRF_TABLE@esd nrft ON nrft.CASE_ID = cq.CASE_ID
LEFT JOIN FNN_LIST fnl ON cq.FNN_ID = fnl.ID
LEFT JOIN NRF_FNN_LIST@esd nrfl ON (nrfl.fnn = fnl.fnn
                                    AND (nrfl.RP_ACTUAL_COMP_DATE is null
                                    OR add_months(nrfl.RP_ACTUAL_COMP_DATE,6)>sysdate)
                                    AND nrft.actioned is null)
LEFT JOIN ESD_HISTORY@esd ed on (cq.CASE_ID = ed.CASE_ID)

现在,我想用nrfl.RANGE_ID和ed.OWN_CODE的值更新CASEQ表(分别转换为CASEQ.RANGE_ID和CASEQ.OWN_CODE)。

我已经尝试了以下方法:

UPDATE caseq cq
    SET (cq.OWN_CODE, cq.RANGE_ID) = (SELECT ed.OWN_CODE, nrfl.RANGE_ID
                                        FROM CASEQ cq1
                                        LEFT JOIN NRF_TABLE@esd nrft ON nrft.CASE_ID = cq1.CASE_ID
                                        LEFT JOIN FNN_LIST fnl ON cq1.FNN_ID = fnl.ID
                                        LEFT JOIN NRF_FNN_LIST@esd nrfl ON (nrfl.fnn = fnl.fnn
                                                AND (nrfl.RP_ACTUAL_COMP_DATE is null
                                                OR add_months(nrfl.RP_ACTUAL_COMP_DATE,6)>sysdate)
                                                AND nrft.actioned is null)
                                        LEFT JOIN ESD_HISTORY@esd ed on (cq1.CASE_ID = ed.CASE_ID)
                                        )

此特定查询返回ORA-01427,并且在我尝试过的变体中出现了其他各种错误。有任何想法吗?

编辑:请勿将其标记为重复项。我已经看过建议的问题。

0 个答案:

没有答案