sql - 插入后跟删除查询
问题描述
我想先在我的表上应用删除查询,然后在同一张表上应用插入查询。
variable_page_category 表有 2 列(page_category_id,variable_id)。它是一个复合主键。
我的表可以是这样的:
page_category_id | 1 2 3 4 5
variable_id | 1 1 1 2 2
result_variable_page_category_delete AS (
DELETE FROM common.variable_page_category
WHERE variable_id = (dynamic_variable_json->>'id')::BIGINT
RETURNING 1
),
result_variable_page_category AS (
INSERT INTO common.variable_page_category (page_category_id, variable_id)
SELECT
(page_category_id::TEXT)::BIGINT,
(dynamic_variable_json->>'id')::BIGINT
FROM jsonb_array_elements_text((dynamic_variable_json->>'page_category_id')::JSONB) AS page_category_id
RETURNING 1
)
但这没有按顺序执行,我收到了这个错误。这两个查询都是正确的。
ERROR: duplicate key value violates unique constraint \"variable_page_category_pkey\"\n Detail: Key (page_category_id, variable_id)=(1, 1) already exists.
如何结合这两个查询,以便在插入之前完成删除查询?更新查询也是一种选择,但因为我是新手,我无法轻松处理更新查询,这就是为什么首先尝试这种方法的原因。
解决方案
为什么不简单地使用 ? 连接两个查询;
?
DELETE FROM common.variable_page_category
WHERE variable_id = (dynamic_variable_json->>'id')::BIGINT
;
INSERT INTO common.variable_page_category (page_category_id, variable_id)
SELECT
(page_category_id::TEXT)::BIGINT,
(dynamic_variable_json->>'id')::BIGINT
FROM jsonb_array_elements_text((dynamic_variable_json->>'page_category_id')::JSONB) AS page_category_id
您可能希望根据您的客户端配置添加事务
推荐阅读
- jquery - 我在我的 asp.net 项目中使用 Slick Slider。一旦我通过“slickRemove”删除幻灯片,子滑块第一张幻灯片,内容变为空
- typo3 - powermail Typo3中的多个文件上传
- jquery - 计算选中行中的数量并更新 div 元素
- java - 请对非常简单的 JAVA 程序分配提供任何反馈、建议或任何帮助
- kubernetes - 当我在我的 kubernetes 中的 yaml 文件下部署时,超时不适用于 istio1.4
- java - Java - 如何测试 RestTemplate POST 方法成功状态码?
- python - eBay Python Finding API 中的身份验证错误
- c - 如何在 C 中获取字符的 8 位二进制表示?
- javascript - 如何使用节点 js 为 Alexa Skill 在函数内返回 handlerinput.responsebuilder
- c++ - 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?