首页 > 解决方案 > 如果不存在多个索引,如何插入

问题描述

我正在使用 Flask 服务器设置 PostgreSQL,我需要在数据库上进行条件插入。实际上我需要检查表上是否已经存在值,但我想用“AND”运算符检查多条记录;实际上我已经尝试过 INSERT table(x,x,x,x) 冲突,但它只需要引用唯一索引。所以我需要像我在其他帖子上看到的那样使用 WHERE NOT EXISTS?我试过这个:

INSERT INTO table(w,x,y,z)
    SELECT 'ValueW','ValueX','ValueY','ValueZ'
WHERE NOT EXISTS (
    SELECT 'ValueW','ValueX','ValueY','ValueZ' FROM table WHERE w=ValueW AND x=ValueX AND y=ValueY AND z=ValueZ
);

由于条件不好,插入值不起作用可能是?如果有人知道解决方案,我会接受:)

谢谢你的时间!

标签: sqlpostgresql

解决方案


您指的是称为列的列ValueW,依此类推。我想你想要常量:

INSERT INTO table(w, x, y, z)
    SELECT 'ValueW', 'ValueX', 'ValueY', 'ValueZ'
    WHERE NOT EXISTS (SELECT 1
                      FROM table t
                      WHERE w = 'ValueW' AND
                            x = 'ValueX' AND
                            y = 'ValueY' AND
                            z = 'ValueZ'
                     );

但是,更好的方法是在四列上声明一个唯一约束,然后只允许遵循约束的更新:

alter table t add constraint unq_t_w_x_y_z
    unique (w, x, y, z);

insert into table (w, x, y, z)
    select 'ValueW', 'ValueX', 'ValueY', 'ValueZ'
    on conflict on constraint unq_t_w_x_y_z do nothing;

推荐阅读