Ich arbeite mit etwas Code. Es gibt mehrere Abfragen, deren Auswirkung es ist, dass wenn die Zeile mit einigen der aufgefüllten Daten vorhanden ist, diese Zeile mit dem Rest der Daten aktualisiert wird, und wenn die Zeile nicht existiert, wird eine neue erstellt. Sie sehen wie folgt aus:Wie funktioniert diese SQL-Abfrage, um eine Zeile zu aktualisieren, wenn vorhanden, oder einfügen, wenn nicht, funktioniert?
INSERT INTO table_name (col1, col2, col3) SELECT %s AS COL1, %s AS COL2, %s AS COL3 FROM (SELECT %s AS COL1, %s AS COL2, %s AS COL3) A LEFT JOIN table_name B ON B.COL1 = %s AND B.COL2 = %s --note: doesn't mention all columns here WHERE B.id IS NULL LIMIT 1
ich dieses Muster nachahmen kann und es scheint zu funktionieren, aber ich bin verwirrt, was eigentlich hinter den Kulissen. Kann jemand erklären, wie das eigentlich funktioniert? Ich benutze PostgreSQL.
ah, damit wird ein bereits vorhandener Eintrag nicht aktualisiert? es stellt nur sicher, dass doppelte Zeilen nicht erstellt werden? – Claudiu
Yup, die Where-Klausel dient nur dazu, sicherzustellen, dass es sich nicht um eine Duplizierung handelt. –
ist hier ein Unterschied zu tun dies vs etwas wie: 'INSERT INTO Tabellenname (Spalte1, Spalte2, Spalte3) SELECT% s,% s,% s WHERE NICHT EXISTS (SELECT * FROM Tabellenname als T WHERE T.col1 =% s UND T.col2 =% s) '? – Claudiu