2013-04-05 17 views
5

Wenn Sie versuchen, die WHERE NOT EXISTS Klausel zu verwenden, um das Hinzufügen einer Zeile mit einem doppelten Wert in der Spalte age zu verhindern, erhalte ich den Fehler syntax error at or near "WHERE".WHERE NICHT EXISTIERT in PostgreSQL gibt Syntaxfehler

Warum hat es einen Syntaxfehler ausgelöst? Ich benutze Postgresql 9.1.

SQL

INSERT INTO live.users ("website", "age") 
values ('abc', '123') 
WHERE NOT EXISTS (SELECT age FROM live.users WHERE age = 123); 

Fehler

ERROR: syntax error at or near "WHERE" 
LINE 6: WHERE NOT EXISTS (SELECT age FROM live.users W... 
+0

Wenn Sie doppelte Werte in einer Spalte verhindern möchten, wäre es besser, dieser Spalte eine eindeutige Einschränkung hinzuzufügen. (ALTER TABLE live.users ADD CONSTRAINT age_unique EINZIGARTIG (Alter)) –

Antwort

25

Sie stattdessen:

INSERT INTO live.users ("website", "age") 
SELECT 'abc', 123 
WHERE NOT EXISTS (SELECT age FROM live.users WHERE age = 123); 
+0

danke sehr hilfreich .. –

3
INSERT INTO live.users ("website", "age") 
select 'abc', '123' 
WHERE NOT EXISTS (SELECT age FROM live.users WHERE age = 123); 
0

I encountere d einige Probleme bei der Verwendung von WHERE field NOT EXISTS in PLPGSQL. Stattdessen, was gut funktioniert hat, war WHERE field NOT IN, ich habe keine Funktionsfehler nach der Verwendung erhalten.

0

Ich sehe Sie für v9.1 gefragt, aber es ist 4 Jahre her, seit und jetzt, von PostgreSQL v9.5 - INSERT Start gibt Ihnen ON CONFLICT … DO NOTHING Option:

INSERT INTO live.users("website", "age") VALUES('abc', '123') ON CONFLICT ("age") DO NOTHING 

Bemerkenswert dies erfordert entsprechende Einschränkung auf der Zieltabelle einrichten - Aber in den meisten Fällen stelle ich mir vor, dass Sie es trotzdem haben würden. Andernfalls erhalten Sie:

ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification 
Verwandte Themen