我正在用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
);
由于条件不好,无法插入值可能是吗?如果有人知道解决方案,我会接受:)
谢谢你!
答案 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;