2017-04-06 1 views
-1

Code: Es ist Merge-Abfrage, die auf Postgres 9.6.2 läuft und geben Syntaxfehler.Was ist die korrekte Syntax zu schreiben "Merge-Anweisung" in 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

Merge-Anweisungen variieren je nach Anbieter. Das Einfügen von Code von einem RDMS in einen anderen bedeutet nicht, dass es funktionieren sollte. – Mokadillion

Antwort

1

Es ist ON CONFLICT

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

Also denke ich, Ihre Frage würde wie folgt aussehen:

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; 

Wenn Sie nicht Primärschlüssel oder einen eindeutigen Index verfügen, dann müssen Sie create unique index on timesheets.timesheet_report using btree (FMNo, ts_start_dt, charge_code);

+0

Es gibt auch Syntaxfehler – Veenu

+0

Sie haben Recht, ich habe Code korrigiert. Jetzt sagt es nur, dass mir Tische fehlen, also sollte es OK sein. –

Verwandte Themen