2 unterschiedliche inserts in einer query

kesnw

Erfahrenes Mitglied
Geht sowas

Code:
update A set A.1 = '1' where Y='name1', set A.2 = '2' where Y='name2;

wie ist es richtig
 
Nein.

Das geht so nicht.

Aber wenn Du beides tun möchtest, als wenn es EIN Vorgang wäre, dann mach eine Transaktion draus. Siehe Doku zum Thema Transaktionen.

Chris
 
Hallo.
Zumindest in MySQL geht das so nicht, soviel ich weiß. Soweit ich richtig interpretiere was Du willst, gienge das wohl so:
Code:
UPDATE
 A
SET
 A.1 = IF(Y = 'name1', '1', A.1),
 A.2 = IF(Y = 'name2', '2', A.2)
WHERE
 (Y = 'name1' OR Y = 'name2')
Im Klartext: "Ändere bei allen Datensätzen der Tabelle A, bei denen in Feld Y 'name1' steht, den Inhalt des Feldes 1 auf 'name1' sowie bei allen Datensätzen bei denen in Feld Y 'name2' steht, den Inhalt des Feldes 2 auf 'name2'".
Das ganze würde auch ohne WHERE-Klausel funktionieren, ich schätze aber, dass es mit dieser besser performt.

Ich nehme mal als gegeben hin, dass Du das aus irgendwelchen Gründen so machen musst und dass das nur ein Beispiel für eine eigentlich etwas komplexere Aufgabe ist. Ansonsten würde ich nämlich behaupten, dass 2 UPDATEs deutlich schneller und einfacher wären:
Code:
UPDATE A SET A.1 = '1' WHERE Y = 'name1';
UPDATE A SET A.2 = '2' WHERE Y = 'name2'
Mal abgesehen davon, dass Feldnamen nicht nur aus Ziffern bestehen dürfen (A.1 und A.2).

Und wenn, wie Chris vermutet, Transaktionssicherheit der Grund für diese Anforderung ist, dann ist diese Vorgehensweise eher nicht zielführend. Dann wirklich nur mit Transaktion - in MySQL hieße das: InnoDB oder BDB.

Grüße,
Martin
 
Zuletzt bearbeitet:
Zurück