2017-04-06 9 views
-1

code:Postgres 9.6.2で実行されている構文エラーです。PostgreSQL 9.6.2で「merge文」を書く正しい構文は何ですか

<<!--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

を与えています。そうです、コードを修正しました。今はそれが私がテーブルを欠いていると言うので、OKにする必要があります。 –

関連する問題