sql - Postgres : WHERE. .. AND语法问题

标签 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

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

最佳答案

试试这个:

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

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

关于sql - Postgres : WHERE. .. AND语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4554916/

相关文章:

java - 使用 AttributeConverter 转换为 UUID 导致 'No Dialect mapping for JDBC type' 异常

sql - PostgreSQL 列值取决于前面的行

mysql - SQL:根据其他两列提取信息

sql - 在 Power BI 中使用计数和分组依据

mysql - SQL:从表中获取日期

java.sql.SQL语法错误异常 : Syntax error: Encountered "(" at line

postgresql - 我是否需要将 ALL 授予 PostgreSQL 9.3 数据库中某个表的所有者?

mysql - 你会如何设计一个表来记录用户在mysql中的好恶?

postgresql - 为什么不能在表上并行执行 truncate 和 grant 语句?

sql - Postgresql 触发器根据一列的值更改或更新每一行中其他列的值。