sql - 如果不存在多个索引,如何插入
问题描述
我正在使用 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
);
由于条件不好,插入值不起作用可能是?如果有人知道解决方案,我会接受:)
谢谢你的时间!
解决方案
您指的是称为列的列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;
推荐阅读
- gradle-kotlin-dsl - Gradle Kotlin DSL:访问 settings.gradle.kts 中定义的对象
- windows - 在 Windows 上使用 Lua 读写串行端口
- javascript - 根据 Symbol ES6 中的可用性重复调用
- ios - 使用 Swift 搜索结果后,搜索栏没有重新加载到原始数据?
- php - 每次尝试在 php 文件中使用 password_hash 时,Ajax 都会失败
- java - ModelMapper 发出白色从字符串转换为 ObjectId 的问题
- nativescript - 如何在 NativeScript Angular 中消除 SearchBar 的抖动?
- python - 散点图上的散景图回归线
- function - 如何驯服 Power BI 函数名称的区分大小写
- angular - 我的 ngStyle 不适用于 Ionic 中的“或”条件