问题
I have an access query that I need to have converted to Oracle. And in access, it uses an inner join that is within an inner join. I am not an expert at any of this, but I only learned Oracle to an extent and practically nothing in access. (and is not my access string either (creator of it died a year back)). And I have no choice in its conversion to oracle... it just needs to get done. :/
anyhow... here is the string:
UPDATE AIRMODEL_NETWORK_SUMMARY
INNER JOIN (HISTORY_BOL
INNER JOIN PERIOD_TO_PROCESS
ON
(HISTORY_BOL.FSCL_WK_IN_YR_NUM = PERIOD_TO_PROCESS.FSCL_WK_IN_YR_NUM)
AND
(HISTORY_BOL.FSCL_YR_NUM = PERIOD_TO_PROCESS.FSCL_YR_NUM)
)
ON
(AIRMODEL_NETWORK_SUMMARY.LOC_ID = HISTORY_BOL.TO_LOC_ID)
AND
(AIRMODEL_NETWORK_SUMMARY.FSCL_WK_IN_YR_NUM = HISTORY_BOL.FSCL_WK_IN_YR_NUM)
AND
(AIRMODEL_NETWORK_SUMMARY.FSCL_YR_NUM = HISTORY_BOL.FSCL_YR_NUM)
SET AIRMODEL_NETWORK_SUMMARY.CASES_RCVD = TOTAL_BOL_SHIP_CASE_QTY;
回答1:
Oracle likes it differently:
MERGE
INTO AIRMODEL_NETWORK_SUMMARY
USING (
SELECT TOTAL_BOL_SHIP_CASE_QTY, ROWID AS r
FROM AIRMODEL_NETWORK_SUMMARY
INNER JOIN HISTORY_BOL
ON
(AIRMODEL_NETWORK_SUMMARY.LOC_ID = HISTORY_BOL.TO_LOC_ID)
AND
(AIRMODEL_NETWORK_SUMMARY.FSCL_WK_IN_YR_NUM = HISTORY_BOL.FSCL_WK_IN_YR_NUM)
AND
(AIRMODEL_NETWORK_SUMMARY.FSCL_YR_NUM = HISTORY_BOL.FSCL_YR_NUM)
INNER JOIN PERIOD_TO_PROCESS
ON
(HISTORY_BOL.FSCL_WK_IN_YR_NUM = PERIOD_TO_PROCESS.FSCL_WK_IN_YR_NUM)
AND
(HISTORY_BOL.FSCL_YR_NUM = PERIOD_TO_PROCESS.FSCL_YR_NUM)
)
ON (rowid = r)
WHEN MATCHED THEN
UPDATE
SET CASES_RCVD = TOTAL_BOL_SHIP_CASE_QTY;
来源:https://stackoverflow.com/questions/25496829/update-with-double-joins