簡體   English   中英

需要將 3 條 sql 語句合並為 1 條

[英]need to combine 3 sql-statement into 1

我有 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,我試圖在 select 周圍加上括號並將其放入 insert 中,並且還查看了 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()正常工作,兩次插入之間不能有其他語句,並且必須在單個事務中運行(因此需要關閉自動提交)


或者,您可以使用數據修改 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;

請不要將數字放在單引號中。

答案是:不可能將這些組合成一個簡單的普通 ANSI SQL 語句。

第一個和第三個完全談論兩個不同的表。 第二個是 Select 語句,它與其他兩個語句類型不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM