如果不存在多个索引如何插入

时间:2019-06-13 08:52:36

标签: sql postgresql

我正在用Flask服务器设置PostgreSQL,我需要在数据库上进行条件插入。实际上,我需要检查表上是否已经存在值,但是我想使用“ AND”运算符检查多个记录;实际上,我曾尝试对INSERT表(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
);

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

谢谢你!

1 个答案:

答案 0 :(得分:1)

您所指的是名为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;