2016-07-26 13 views
1

Ich bin mit HSQLDB und eine Erklärung weicht haben Daten verschmilzt zu einem TischMERGE INTO-Anweisung in MySQL und PostreSQL

MERGE INTO USERS USING (VALUES(null,?,?))" + 
"AS VALS(A,B,C) ON USERS.NAME = VALS.B 
AND USER.EMAIL = VALS.C " + 
"WHEN MATCHED THEN UPDATE SET USERS.NAME = VALS.B, 
USERS.EMAIL = VALS.C " + 
"WHEN NOT MATCHED THEN INSERT VALUES VALS.A, VALS.B, VALS.C 

Diese Anweisung eine Zeile aktualisiert, wenn ein Benutzer vorhanden ist, und erstellt einen neuen, wenn nicht

Es sieht aus wie MERGE INTO wird nicht von MySQL und PostgreSQL unterstützt

Könnte jemand bitte beraten, wie Sie die gleiche Aussage ohne Verwendung von MERGE INTO in MySQL und PostgreSQL durchführen. Ich möchte das nur eine Anweisung und mit ausgezeichneter perfomance bitte

Dank habe

+1

MySQL hat eine andere Syntax: http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html –

+1

In Postgres 9.5+ Verwendung 'auf conflict' Klausel Insert-Anweisung https://www.postgresql.org/docs/9.5/static/sql-insert.html#SQL-ON-CONFLICT –

Antwort

0

Wenn Ihre Notwendigkeiten zu einigen Fragen wie MERGE für MySQL verknüpft sind, können Sie versuchen, diese Syntax zu verwenden:

UPDATE a 
INNER JOIN b 
    ON a.feild1= b.feild1 
SET a.feild2= b.feild2 
WHERE a.feild3 = 0; 

Es funktioniert für MySQL 5+ und ich denke, es wird auch für MySQL 4+ funktionieren.

The source link of the solution