sql - 如何使用 RETURNING 子句插入两个表?
问题描述
我不明白如何使用RETURNING
,例如如何获得“在我手中”的实际价值以进行下一步。假设,我有两张桌子:
create table "actors" (
id_act serial not null primary key,
first_name text not null,
last_name text not null
);
create table movies (
id_mov serial not null primary key,
act_id integer not null
);
现在我添加一个演员:
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks');
紧接着,我想用那个新演员的 ID 插入一部电影:
INSERT INTO movies(###);
我如何RETURNING
使用它来代替我的占位符###?
解决方案
您不需要使用 PL/pgSQL RETURNING
,这也可以在普通 SQL 中使用。
但是对于您遇到的问题,您都不需要,因为您可以使用currval()
from the sequence backingactors.id
来获取最后生成的id
:
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks');
INSERT INTO movies(act_id) values
(currval(pg_get_serial_sequence('actors', 'act_id')));
如果你真的想使用 RETURNING,你可以使用数据修改 CTE
with new_actor as (
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks')
returning id_act
)
insert into movies (act_id)
select id_Act
from new_actor;
推荐阅读
- jquery - CSS 适用于 ajax 成功响应
- python - 加权随机选择:根据 .txt 文件中的频率随机生成“n”个单词列表
- reactjs - 太多的重新渲染。React 限制了渲染的数量以防止无限循环。在 render 方法中更新功能组件的状态
- python - 在一个函数中返回多个值
- sql - Spark SQL(Databricks)-AnalysisException:无法评估内联表定义中的表达式outer()-多列聚合
- yugabyte-db - 如何在 yugabyte 的标准输出上打印更改数据日志?
- python - 天蓝色 bash 环境中的 rpyc_classic.py
- html - 如何实现缩小到另一个图像过渡效果
- encryption - 如何加密 neo4j 数据?
- php - 用php中的变量替换url参数