Mysql
 sql >> Database >  >> RDS >> Mysql

Conversione dell'istruzione merge in MySQL utilizzando una chiave duplicata

La sintassi corretta in MySQL è:

INSERT INTO XYZ (PARENT_JOB_NAME, CHILD_JOB_NAME, FIRST_EXECUTION, SANDBOX, PLATFORM_NAME)
    SELECT ITRR.WORKFLOW_NAME, ITRR.INSTANCE_NAME,
           MIN(ITRR.START_TIME), ITRR.SUBJECT_AREA, 'INFORMATICA'
    FROM ABC IWRR JOIN
         DEF ITRR
         ON IWRR.WORKFLOW_RUN_ID = ITRR.WORKFLOW_RUN_ID 
    WHERE IWRR.USER_NAME IN ('XYZ') AND
          ITRR.RUN_STATUS_CODE <> 2
    GROUP BY ITRR.WORKFLOW_NAME, ITRR.INSTANCE_NAME, ITRR.SUBJECT_AREA
ON DUPLICATE KEY UPDATE FIRST_EXECUTION = VALUES(FIRST_EXECUTION);

Nota l'uso di standard corretto, esplicito , leggibile JOIN sintassi. Usalo.

I cambiamenti principali sono

  • Correzione della sintassi arcaica.
  • Non è necessario rimuovere le parentesi per la select in un inserto insert . . . select (anche se probabilmente sono consentiti).
  • Rimozione dell'alias tabella, cosa assolutamente non consentita.
  • Correzione del on duplicate key dichiarazione.