2017-07-30 72 views
0

我有兩個表,我想在這種意義上比較,如果circuitId是相同的兩列它應該檢查如果CHECKSUM列是否相同,如果他們是同樣也不會在表格中插入新記錄。如果circiutId不在表中,它應該添加一個新行。處理刪除和更新通過比較兩個表

到目前爲止,我有這個,但我不知道如何實現,以便在WHEN MATCHED THEN的邏輯裏面。所以它內部檢查校驗和是否相同,從而插入記錄?

MERGE INTO ARCHIVE.F1_CIRCUITS n 
     USING EXTRACT.F1_CIRCUITS o 
     ON 
     (n.CIRCUITID= o."circuitId") 
     WHEN MATCHED THEN 
     WHEN NOT MATCHED THEN 
      INSERT VALUES 
      ("circuitId","circuitRef","name","location","country","lat","lng","alt","url", CURRENT_TIMESTAMP, NULL, HASH_MD5("circuitId","circuitRef","name","location","country","lat","lng","alt","url"), 'C', 0) 

回答

0

我覺得insert是足夠了:

INSERT INTO ARCHIVE.F1_CIRCUITS (. . .) 
    SELECT . . . 
    FROM EXTRACT.F1_CIRCUITS o 
    WHERE NOT EXISTS (SELECT 1 
         FROM ARCHIVE.F1_CIRCUITS n 
         WHERE o.circuitid = n.circuitid AND 
          o.checksum = n.checksum 
        ); 

. . .是不同的列名和表達式。