Какой ORACLE Update SQL Query для этого? - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу обновить значение RENEWED_PERMIT_TEMP до T2_VAL.

Думаю о merge into, но я не привык к ORACLE DB.

SELECT t1.INSTANCE_ID
      ,t1.RENEWED_PERMIT_TEMP
      ,t1.USER_REFERENCE_NUMBER AS t1_val
      ,t2.USER_REFERENCE_NUMBER AS t2_val
      ,t2.PREV_CERTIFICATE_PERMIT_NUMBER
      ,t1.APPROVAL_REFERENCE
FROM LCS_GEN_COPY AS t1
INNER JOIN LCS_GEN_COPY AS t2 ON t2.PREV_CERTIFICATE_PERMIT_NUMBER = t1.APPROVAL_REFERENCE
                              AND t1.RENEWED_PERMIT_TEMP  = t1.USER_REFERENCE_NUMBER

Данные этого запроса

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вы можете попробовать ниже

UPDATE 
(SELECT t1.INSTANCE_ID
      ,t1.RENEWED_PERMIT_TEMP
      ,t1.USER_REFERENCE_NUMBER AS t1_val
      ,t2.USER_REFERENCE_NUMBER AS t2_val
      ,t2.PREV_CERTIFICATE_PERMIT_NUMBER
      ,t1.APPROVAL_REFERENCE
FROM LCS_GEN_COPY AS t1
INNER JOIN LCS_GEN_COPY AS t2 ON t2.PREV_CERTIFICATE_PERMIT_NUMBER = t1.APPROVAL_REFERENCE
AND t1.RENEWED_PERMIT_TEMP  = t1.USER_REFERENCE_NUMBER
) t
SET t.RENEWED_PERMIT_TEMP = t.t2_val
0 голосов
/ 19 ноября 2018

Мы можем попробовать использовать коррелированный подзапрос:

UPDATE LCS_GEN_COPY t1
SET RENEWED_PERMIT_TEMP = (SELECT DISTINCT t2.USER_REFERENCE_NUMBER
                           FROM LCS_GEN_COPY t2
                           WHERE t2.PREV_CERTIFICATE_PERMIT_NUMBER =
                                     t1.APPROVAL_REFERENCE AND t1.RENEWED_PERMIT_TEMP =
                                     t1.USER_REFERENCE_NUMBER);
...