INSERT oder UPDATE ... ON DUPLICATE

JesusFreak777

Erfahrenes Mitglied
Hallo,

kann mir jemand erklären wie das mit dem ON DUPLICATE KEY Funktioniert?

ich habe eine Tabelle in der 4 Spalten sind. Eine Spalte möchte ich updaten... es kann aber sein, das die werte noch nicht existieren, dann möchte ich einen Insert machen:

beispiel:

tabelle:
wert1| wert2| wert3| updatewert
AA, 14, TEST, ALT

jetzt möchte ich in die Tabelle schreiben:
AA, 14, TEST, NEU
-> da AA, 14, TEST bereits existiert soll ein UPDATE gemacht werden

Code:
UPDATE tabelle SET (updatewert) values(NEU) WHERE wert1 = AA AND wert2 = 14 AND wert3 = TEST

will ich jetzt aber
AA, 15, TEST, NEU schreiben, soll er mir ein INSERT machen
...

Ich habe zwar die Funktion ON DUPLICATE KEY UPDATE gefunden, verstanden habe ich die aber nicht (vor allem nicht wie ich überprüfe ob meine WERTE gegeben sind...

Vielen Dank
 
Hi

dieser Ausdruck prüft (wie der Name sagt), ob die Primärkeyspalte(n) gleich ist(sind).
Wenn das nicht das ist, was man will, muss man es extra getrennt vom Insert prüfen und dann ggf. einfügen.
 
Hallo,

leider bin ich mir der Verschatelung überfordert...

das mit dem Primärkey bringt mir nichts, da immer andere Faktoren überpüft werden müssen...

ich hab zwar meine zwei QUERYS hinbekommen

Code:
INSERT INTO einstellungen (vID, FLD01, FLD02, FLD03) VALUES ((SELECT ID FROM benutzer WHERE FLD01 = 'baer'), 'tab', 3, 'fisch' );

Code:
UPDATE einstellungen SET FLD03 = 'maus' 
  WHERE vID = (SELECT ID FROM benutzer WHERE FLD01 = 'baer')
      AND fld01 = 'tab'
      AND fld02 = 1;

aber wie verbinde ich diese jetzt Sinnvoll?

Seite wie diese (SQL) bringen mich dann irgendwie noch weiter von meinem Ziel ab:
http://blogs.msdn.com/b/miah/archive/2008/02/17/sql-if-exists-update-else-insert.aspx

mit MySQL läuft das nicht :(

ein Versuch war auch noch

Code:
IF (SELECT count(*) WHERE vID = (SELECT ID FROM benutzer WHERE FLD01 = 'baer') AND fld01 = 'tab' AND fld02 = 1) = 1 THEN
    UPDATE einstellungen SET FLD03 = 'maus' 
      WHERE vID = (SELECT ID FROM benutzer WHERE FLD01 = 'baer')
      AND fld01 = 'tab'
      AND fld02 = 1
ELSE
    INSERT INTO einstellungen (vID, FLD01, FLD02, FLD03) VALUES ((SELECT ID FROM benutzer WHERE FLD01 = 'baer'), 'tab', 3, 'fisch' )
END IF;

aber auch das mag mich nicht :/

Vielen Dank für jeden Tipp
 
Zurück