克隆一条记录,然后使用其自动增量ID进行进一步的操作
技术问答
315 人阅读
|
0 人回复
|
2023-09-12
|
更新:6 a* y3 [$ O5 z2 b8 t0 F* ^/ U
缩小代码范围后,似乎该行
: o/ u0 m( ?% I0 [& mINSERT INTO table1 TABLE table1_temp RETURNING id
2 G+ s2 e, ^/ G) z0 t/ z/ _% f造成了问题。任何提示这有什么问题吗?1 x, T' @5 U u
8 @; ], ]: F5 ~ y/ ^原始问题:4 a L$ ~1 W# x* _
table1有许多列(我不在乎),并且它具有自动递增主键(id)。这是我需要做的以及正在尝试的方式:
9 ?8 D* U8 R; U9 j9 Y& |8 F# ]; Q首先,我想复制table1中的一条记录。9 u P+ k3 J7 i9 Q, r$ t
BEGIN;1 V: A) G1 j0 W# _& v
CREATE TEMP TABLE table1_temp ON COMMIT DROP AS1 M5 ~0 J7 c5 b+ P! ^
SELECT * FROM table1 WHERE id = ;6 m, W1 W$ E5 f! H5 Y$ E- J: E0 A* |
ALTER TABLE table1_temp DROP COLUMN id;
& C0 M& \, C6 e Y i3 a+ y. IWITH generated_id AS (: _1 ^) U9 f8 ~4 C
INSERT INTO table1 TABLE table1_temp RETURNING id
0 t2 e; l" {5 I& r, a) r)) ^1 K, w1 X$ F3 T$ m% ^) R
然后,对some_table执行插入操作,在这里我需要使用在table1中创建的副本的生成ID。
+ H/ E# @! R3 d9 L( j8 yINSERT INTO some_table (something, the_id_into_this), }7 `' \7 Y4 b0 H" `
VALUES ('some value', (SELECT id FROM generated_id));5 q/ e* X8 H8 g' |! W4 I
然后从yet_another_table中获取一些数据(列:somestuff,id_here),并使用此数据和ID插入同一张表中。
) G% r; u8 a/ m: C, r6 G+ m/ ^INSERT INTO yet_another_table
6 w8 v' f6 K9 S% S (SELECT somestuff,. Y1 i6 E0 z5 k d+ \8 B7 @ H) N. ^
(SELECT id FROM generated_id) AS id_here7 R4 g5 J% I2 K+ s
FROM yet_another_table
u( Q" ~. H# S3 B WHERE id_here = )8 Z! E2 G. R: m1 @, M' M0 U1 m
最后,我需要返回ID,以便可以在我的应用中使用它…
" m! d5 {7 o i* Y- g8 ~4 DRETURNING id_here AS id;) D# ?! u6 A! ]9 V6 _
COMMIT;) l: r: u& l5 P4 I" ^4 l4 q: M% j
我是否在正确的道路上实现这一目标?运行查询时,出现以下错误:
) @7 f5 J* ]' D/ {2 N8 C5 K! R4 S' J k5 ^! U
列“ id”的类型为整数,但表达式的类型为字符变化提示:您将需要重写或强制转换表达式。 U% X) A# x* Y- M9 G
d2 k `) b' t1 L- v
它没有告诉我行号在哪里出现,我也不知道是什么原因引起的。$ {/ d" v2 I6 g& c% S
" `2 V) u! |/ R6 i, K' O& Z
解决方案: |
|
|
|
|
|