PostgreSQL:如何在另一个 SQL 中使用 INSERT…RETURNING 返回的值

今天 bbs里有人问到如何使用 “INSERT…RETURNING” 语句值的问题,目标想使用 array_append 数组函数追加 “INSERT…RETURNING” 返回的值。

目标结果

1
2
3
francs=> select array_append(array[1,2,3],insert into test_return (id) values (3) returning id);
ERROR: syntax error at or near "into"
LINE 1: select array_append(array[1,2,3],insert into test_return (id...

备注:当然这是行不通的,因为语法不支持,接下来测试下,看看是否有其它方法。

在介绍之前,先复习下 “INSERT…RETURNING” 的用法。

创建测试表

创建测试表,并测试返回插入的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
francs=> create table test_return (id int4 primary key,name character(32));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_return_pkey" for table "test_return"
CREATE TABLE

francs=> insert into test_return (id) values (1) returning id;
id
----
1
(1 row)

INSERT 0 1

francs=> insert into test_return (id,name) values (2,'a') returning *;
id | name
----+----------------------------------
2 | a
(1 row)

INSERT 0 1

francs=> select * from test_return ;
id | name
----+----------------------------------
1 |
2 | a
(2 rows)

备注:上面的结果已经很清晰了, returning 属性不但能返回指定的字段,也能返回插入的整行。且返回的数据类型和插入的数据类型对应。回到开头的问题,如何使用 “INSERT…RETURNING” 语句返回的值呢,

使用 CTE

1
2
3
4
5
6
7
8
francs=> with temp_row as (
francs(> insert into test_return (id) values (3) returning id
francs(> )
francs-> select array_append(array[1,2,3],id) from temp_row;
array_append
--------------
{1,2,3,3}
(1 row)

备注:使用 “WITH QUERY” 语句先保存中间结果到表 temp_row,接下来可以使用 temp_row 的值进行 SELECT ,UPDATE,DELETE,INSERT 操作了。

也能使用 “INSERT…RETURNING” 返回的值插入到另一个表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
francs=> truncate table test_1;
TRUNCATE TABLE

francs=> with temp_row as (
francs(> insert into test_return (id) values (6) returning id
francs(> )
francs-> insert into test_1 (id) select id from temp_row;
INSERT 0 1

francs=> select * From test_1;
id | name
----+------
6 |
(1 row)

参考

原创文章,作者:254126420,如若转载,请注明出处:https://blog.ytso.com/237946.html

(0)
上一篇 2022年1月29日
下一篇 2022年1月29日

相关推荐

发表回复

登录后才能评论