2013-04-05 11 views
5

Quando si cerca di utilizzare la clausola WHERE NOT EXISTS per impedire l'aggiunta di una riga con un valore duplicato nella colonna age, ottengo l'errore syntax error at or near "WHERE".DOVE NON esiste in PostgreSQL dà errore di sintassi

Perché ha generato un errore di sintassi? Sto usando Postgresql 9.1.

SQL

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

errore

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

Se vuoi impedire i valori duplicati in una colonna, sarebbe meglio aggiungere un 'vincolo univoco' a quella colonna. (ALTER TABLE live.users ADD CONSTRAINT age_unique UNIQUE (età)) –

risposta

25

fare, invece:

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

grazie molto utile .. –

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 alcuni problemi nell'uso di WHERE field NOT EXISTS in PLPGSQL. Invece ciò che ha funzionato bene è stato WHERE field NOT IN, non ho ricevuto errori di funzione dopo averlo usato.

0

ti vedo chiesto v9.1 ma è stato 4 anni da allora e ora, a partire dalle PostgreSQL v9.5 - INSERT ti dà ON CONFLICT … DO NOTHING opzione:

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

Da segnalare questo richiede rispettivo vincolo istituito sulla tabella di destinazione - ma nella maggior parte dei casi, immagino che lo avresti comunque. Altrimenti riceverai:

ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification 
Problemi correlati