0 0 Stimmen

Firebird: INSERT mit ON DUPLICATE KEY UPDATE

Frage von PC Control | 09.07.2017 um 22:10 Uhr

Ich möchte einige Daten in eine Firebird-Datenbank entweder neu einfügen oder falls die entsprechende ID bereits existiert, den Datensatz mit dieser ID updaten. Dies würde ich gerne innerhalb von einer Abfrage tun, damit ich keine Fehlermeldungen bekomme und nicht jedes Mal zuerst überprüfen muss, ob eine ID schon in der Tabelle ist.

Für diese Zwecke gibt es in MySQL den Befehl "INSERT ... ON DUPLICATE KEY UPDATE", den man folgender Weise formuliert:

INSERT INTO tab (id, val) VALUES (10, 1)
  ON DUPLICATE KEY UPDATE val = val + 1;

Damit wird ein Eintrag mit id = 10 und val = 1 in die Tabelle "tab" neu eingetragen, falls es die id = 10 noch nicht gibt. Falls es diese ID gibt, wird der Wert von val dieser Zeile um 1 erhöht.

Genau das würde ich gerne nun mit Firebird machen. Leider scheint Firebird diese Syntax aber nicht zu verstehen und gibt mir immer nur eine Fehlermeldung aus. Was kann ich tun? Gibt es diese Möglichkeit nicht in Firebird?

AntwortenPositivNegativ

NetGuy

Profil anzeigen | Nachricht
Avatar
1Beste Antwort
1 Stimme

Doch, auch in Firebird kannst du ein "ON DUPLICATE KEY UPDATE"-INSERT durchführen. Allerdings ist in Firebird die Syntax etwas anders. Statt der MySQL-Syntax, musst du "UPDATE OR INSERT" schreiben. Deine Abfrage von oben würde entsprechend folgendermaßen in Firebird aussehen:

UPDATE OR INSERT INTO tab (id, val) 
  VALUES (10, 1);

Die "UPDATE OR INSERT" von Firebird nutzt automatisch die vorhandenen Spalte(n) mit PRIMARY KEY. Wenn du keine PRIMARY KEY Spalte hast oder andere Spalten für den Match verwenden möchtest, kannst du das Keyword MATCHING verwenden und hinten anstellen:

UPDATE OR INSERT INTO tab (id, val) 
  VALUES (10, 1) 
  MATCHING(id);

Hinter MATCHING in der Klammer definierst du, welche Spalten für die Übereinstimmung benutzt werden sollen. In diesem Beispiel habe ich wieder die Spalte "id" genommen.

Mehr zu diesem Thema findest du auch in der Firebird-FAQ.
10.07.2017 um 22:42 Uhr

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Wichtiger Hinweis

Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.