SQL IF-Anweisung
FireGlow
- datenbank
Moin!
Ich bin auf der Suche nach einem SQL Ausdruck, um folgendes zu realisieren:
Wenn Eintrag x in Tabell y nicht vorhanden ist, soll x dort eingefügt werden. Wenn Eintrag x vorhanden ist und einen bestimmten wert hat, soll dieser gupdated werden.
Ist das möglich?
Grüße
FireGlow
Hi!
Ist das möglich?
Du schreibst nur von SQL, aber nicht, um welche Datenbank es sich wirklich handelt.
MySQL unterstützt beispielsweise Kontroll-Strukturen wie IF oder CASE.
Einige andere (meist kleinere) Datenbanken tun dies allerdings nicht, obwohl sie eigentlich SQL verstehen.
Schöner Gruß,
rob
Ist das möglich?
Du schreibst nur von SQL, aber nicht, um welche Datenbank es sich wirklich handelt.
Ah Soory ich nutze PostgreSQL, gibt es da diese Kontrollstrukturen auch?
Ah Soory ich nutze PostgreSQL, gibt es da diese Kontrollstrukturen auch?
Laut wikipedia soll sowas gehen:
IF EXISTS( SELECT * FROM phonebook
WHERE name = 'john doe' )
UPDATE phonebook
SET extension = '1234' WHERE name = 'john doe'
ELSE
INSERT INTO phonebook VALUES( 'john doe','1234' )
Leider klappt das bei Direkteingabe nicht:
"ERROR: syntax error at or near "IF" at character 1"
Hi!
Ah Soory ich nutze PostgreSQL, gibt es da diese Kontrollstrukturen auch?
Warum schaust du nicht einfach in das offizielle PostgreSQL-Handbuch?
Eigentlich sollte das jedem, der mit PostgreSQL arbeitet, ein Begriff sein...
Du kannst es als gezippte PDF-Datei oder als gezippte HTML-Datei runterladen oder in der HTML-Version online lesen.
Das Handbuch enthält auch ein Kapitel über Konditionale Ausdrücke.
Schöner Gruß,
rob
Auch mti der CASE-Klausel krieg ich direkt einen Fehler, sind die Konditionalen Ausdruecke nur fuer bestimmte Versionen von postgres verfuegbar?
yo,
Wenn Eintrag x in Tabell y nicht vorhanden ist, soll x dort eingefügt werden. Wenn Eintrag x vorhanden ist und einen bestimmten wert hat, soll dieser gupdated werden.
ich würde es mit zeit anweisungen lösen, einen Insert und einen Update.
INSERT INTO (spalte1, spalte2....)
SELECT spalte1, spalte2...
FROM tabelle1
LEFT JOIN tabelle2 ON bedingung
WHERE tabelle2.spalte IS NULL
;
UPDATE tabelle2 SEt spalte = wert
WHERE tabelle2.primarykey IN
(SELECT tabelle2.primarykey IN
FROM tabelle1
INNER JOIN tabelle2 ON bedingung
WHERE tabelle1.spalte = Werte
)
;
Ilja