2013-04-05 14 views
5

Podczas próby użycia klauzuli WHERE NOT EXISTS, aby zapobiec dodawaniu wiersza o zduplikowanej wartości w kolumnie age, pojawia się błąd syntax error at or near "WHERE".GDZIE NIE ZNAJDUJE SIĘ w PostgreSQL podaje błąd składni

Dlaczego spowodował błąd składni? Używam PostgreSQL 9.1.

SQL

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

Błąd

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

Jeśli chcesz zapobiec powielaniu wartości w kolumnie, byłoby lepiej dodać "unikalne ograniczenie" do tej kolumny. (ALTER TABLE live.users DODAJ CONSTRAINT age_unique UNIQUE (wiek)) –

Odpowiedz

25

Czy zamiast:

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

dzięki bardzo pomocne .. –

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 niektóre problemy z używaniem WHERE field NOT EXISTS w PLPGSQL. Zamiast tego, co zadziałało dobrze, WHERE field NOT IN, nie otrzymałem żadnych błędów funkcji po użyciu tego.

0

widzę prosiłeś v9.1 ale to już od 4 lat i teraz, począwszy od PostgreSQL v9.5 - INSERT daje ON CONFLICT … DO NOTHING opcję:

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

Warto zauważyć wymaga to odpowiedniego ograniczenia skonfigurować w tabeli docelowej - ale w większości przypadków wyobrażam sobie, że i tak byś to zrobił. W przeciwnym razie otrzymasz:

ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification 
Powiązane problemy