任何人都可以帮助解决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=22398
和place_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
它不会插入记录 - 所以我的语法有什么问题?
答案 0 :(得分:3)
试试这个:
WHERE (22398, 13621) NOT IN (SELECT manor_id, place_id FROM domes_manor_place)
顺便说一句,更好的方法是在列对上使用唯一约束。如果行已存在,这将导致插入失败。
答案 1 :(得分:0)
您需要一个UNIQUE约束,SELECT无法帮助,因为它无法查看尚未提交的数据。不同的交易可以在同一时刻插入新记录,这些记录都是“唯一的”......不是。