sql - PostgreSQL 中的 INSERT 与 ON CONFLICT 可以在 SQL 中是有条件的吗
问题描述
我有以下 SQL 查询:
WITH inserted_id AS (
INSERT INTO users (email,name,user_id,user_name,source)
VALUES (
'a',
'b',
'c',
'd',
'e')
ON CONFLICT (email) DO UPDATE SET
user_id='c',
user_name='d',
source='e'
RETURNING id AS users_id
)
INSERT INTO users_groups (users_id, groups_id)
SELECT users_id, 5 FROM inserted_id;
我希望第二个INSERT
以users_groups
第一个INSERT
完成没有任何冲突为条件——也就是说,该ON CONFLICT
部分没有运行。这可以通过查询完成还是我需要更改什么?
解决方案
您正在 中做某事on conflict
,因此将返回该行。
我认为你可以这样做:
INSERT INTO users_groups (users_id, groups_id)
SELECT users_id, 5
FROM inserted_id
WHERE users_id <> 'aa';
如果可以,您可以简单地使用on conflict do nothing
. 那么id就不会返回了。
推荐阅读
- python - 尝试连接到 SQL 数据库时 Python 脚本挂起
- r - 人口普查,由在同一地方出生的夫妇(有或没有孩子)组成的家庭(dplyr 方式)
- bash - 如何在 shell 脚本 ssh 中读取目标环境变量
- python - 使用 python 即 opencv 检测裁剪面部的运动模糊
- scala - How to recreate if else statements in Scala using objects?
- reactjs - 将 innerHTML 数据和输入数据保存到 firebase
- python - 将深度嵌套的 XML 解析为 pandas 数据框
- ruby-on-rails - 大虾:如何从表头迭代中的表进行迭代?
- ssl - 向多台服务器广播 rtmps 流
- c - 如果我用 SIGPIPE 终止进程,为什么 WIFSIGNALED 为假 + 为什么退出代码 256?