Postgres:WHERE ...和语法问题

时间:2010-12-29 14:26:50

标签: sql postgresql

任何人都可以帮助解决Postgres语法问题吗?我正在尝试插入记录,但在此之前,请使用WHERE... AND检查它是否存在。

=# \d domes_manor_place;
 id       | integer | not null default nextval('domes_manor_place_id_seq'::regclass)
 manor_id | integer | not null
 place_id | integer | not null
=# select * from domes_manor_place where place_id='13621';                                                                            
 24017 |    22276 |    13621

好的,我们知道manor_id=22398place_id=13621没有记录。让我们尝试使用`WHERE ... AND'语法插入它:

=# INSERT INTO domes_manor_place (manor_id, place_id) SELECT 22398, 13621                                                                 
WHERE (22398 NOT IN (SELECT manor_id FROM domes_manor_place)) AND                                                                             
(13621 NOT IN (SELECT place_id FROM domes_manor_place));
INSERT 0 0

它不会插入记录 - 所以我的语法有什么问题?

2 个答案:

答案 0 :(得分:3)

试试这个:

WHERE (22398, 13621) NOT IN (SELECT manor_id, place_id FROM domes_manor_place)

顺便说一句,更好的方法是在列对上使用唯一约束。如果行已存在,这将导致插入失败。

答案 1 :(得分:0)

您需要一个UNIQUE约束,SELECT无法帮助,因为它无法查看尚未提交的数据。不同的交易可以在同一时刻插入新记录,这些记录都是“唯一的”......不是。