gpt4 book ai didi

sql - 需要将 3 条 sql 语句合并为 1 条

转载 作者:行者123 更新时间:2023-11-29 14:03:04 25 4
gpt4 key购买 nike

我有 3 个 SQL 语句,我想将它们合并为一个,这样我就不必从我的程序 (java) 向我的数据库发出多个请求。我的数据库是 PostgreSQL 9.4

第一个在 umgmt_users 中创建一个新用户

INSERT INTO umgmt_users ("user") VALUES ('test1')

第二个获取该用户的 id(db 是 postgres 并且 id 数据类型是串行的,所以它会自动分配给我/程序不知道用户将获得什么 id

SELECT umgmt_users.id
FROM umgmt_users
WHERE umgmt_users.user = 'test1'

第三种是将刚刚创建的用户及其 ID(我需要第二条语句)和其他一些值添加到不同的表中

INSERT INTO
umgmt_user_oe_fac_role ("user_id", "oe_id", "fac_id", "role_id")
VALUES ('ID OF USER test1 created in first statement', '1', '2', '1');

有没有办法将所有三个语句合二为一?

  1. 创建用户
  2. 查看他分配的ID
  3. 将他的 ID + 其他值插入到不同的表中

我不太擅长 SQL,我试着用括号括住选择并将其放入插入中,还查看了 UNION 和 WITH 但无法让它工作...

编辑:结束使用来自 a_horse_with_no_name 的解决方案

with new_user as (
INSERT INTO umgmt_users ("user") VALUES ('test1')
returning id
)
INSERT INTO umgmt_user_oe_fac_role (user_id, oe_id, fac_id, role_id)
SELECT id, 1, 2, 1
FROM new_user;

最佳答案

你只需要两个插入:

INSERT INTO umgmt_users ("user") VALUES ('test1');
INSERT INTO umgmt_user_oe_fac_role (user_id, oe_id, fac_id, role_id)
VALUES (lastval(), 1, 2, 1);

为了使 lastval() 正常工作,两个插入之间必须没有其他语句,并且 have 在单个事务中运行(因此自动提交需要将被关闭)


或者,您可以使用数据修改 CTE,然后将其作为单个 语句执行:

with new_user as (
INSERT INTO umgmt_users ("user") VALUES ('test1')
returning id
)
INSERT INTO umgmt_user_oe_fac_role (user_id, oe_id, fac_id, role_id)
SELECT id, 1, 2, 1
FROM new_user;

请不要将数字放在单引号中。

关于sql - 需要将 3 条 sql 语句合并为 1 条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33942373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com