2013-04-05 12 views
5

WHERE NOT EXISTS yan tümcesini kullanarak, age sütununda yinelenen bir değerle satır eklenmesini engellemek için syntax error at or near "WHERE" hatasını aldım.PostgreSQL'DE VARSAYILAN DEĞERLENDİRME sözdizimi hatası veriyor

Neden bir sözdizimi hatası atmak mı? Postgresql 9.1 kullanıyorum.

SQL

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

Hata

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

bir sütunda yinelenen değerleri önlemek istiyorsanız, o sütundaki constraint'to bir 'benzersiz eklemek daha iyi olurdu. –

cevap

25

yerine yapın:

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

sayesinde çok yararlı (TABLO live.users UNIQUE (yaş) age_unique SıNıRLAMA ADD ALTER) .. –

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

Ben encountere PLPGSQL içinde WHERE field NOT EXISTS kullanımıyla ilgili bazı sorunlar. Bunun yerine iyi çalıştı WHERE field NOT IN ne, bunu kullandıktan sonra hiçbir fonksiyon hataları aldı.

0

I see you v9.1 istedi ama şimdi, PostgreSQL v9.5 - INSERT başlayarak size ON CONFLICT … DO NOTHING seçeneği verir çünkü 4 yıl geçti: Bu hedef masaya kurmak ilgili kısıt gerektirir belirterek

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

değer - ama çoğu durumda, zaten sahip olabileceğini hayal ediyorum. Aksi takdirde alırsınız:

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