2017-04-06 48 views
-1

代碼:這是在Postgres 9.6.2上運行並給出語法錯誤的合併查詢。什麼是在PostgreSQL中編寫「合併語句」的正確語法9.6.2

<<!--It is giving syntax error---> 
MERGE INTO timesheets.timesheet_report AS tgt USING timesheets.tmp_timesheet_report AS src ON src.FMNo = tgt.FMNo 
    AND src.ts_start_dt = tgt.ts_start_dt 
    AND src.charge_code = tgt.charge_code WHEN NOT MATCHED 
    INSERT (tgt.FIRST_NAME, 
      tgt.LAST_NAME) 
    VALUES(src.FIRST_NAME, 
      src.LAST_NAME) WHEN MATCHED 
    UPDATE 
    SET tgt.FIRST_NAME = src.FIRST_NAME, 
     tgt.LAST_NAME = src.LAST_NAME; 
+0

合併報表因供應商而異,將代碼從一個RDMS粘貼到另一個RDMS並不意味着它應該起作用。 – Mokadillion

回答

1

這是ON CONFLICT

INSERT INTO table_name [your usual insert syntax here] 
ON CONFLICT [some conflict definition] 
DO UPDATE SET column1 = EXCLUDED.value1 

所以我想您的查詢應該是這樣的:

INSERT INTO timesheets.timesheet_report (FMNo, ts_start_dt, charge_code, FIRST_NAME, LAST_NAME) 
SELECT src.FMNo, src.ts_start_dt, src.charge_code, src.FIRST_NAME, src.LAST_NAME FROM timesheets.tmp_timesheet_report AS src 
ON CONFLICT (FMNo, ts_start_dt, charge_code) 
DO UPDATE 
SET FIRST_NAME = EXCLUDED.FIRST_NAME, 
    LAST_NAME = EXCLUDED.LAST_NAME; 

如果沒有主鍵或唯一索引,那麼你需要create unique index on timesheets.timesheet_report using btree (FMNo, ts_start_dt, charge_code);

+0

它也給語法錯誤 – Veenu

+0

你是對的,我糾正了代碼。現在只說我缺少表格,所以應該沒問題。 –