Đây là một ví dụ tối thiểu về vấn đề thực tế của tôi:
create table t(id serial primary key, rnd double precision);
tất nhiên bạn có thể trả về các cột được chèn với một returning
mệnh đề:
with w as (insert into t(rnd) values(random()) returning *)
insert into t(rnd) select random() from w returning *;
/*
| ID | RND |
|----|----------------|
| 9 | 0.203221440315 |
*/
bạn cũng có thể trả lại một nghĩa đen:
with w as (insert into t(rnd) values(random()) returning *)
insert into t(rnd) select random() from w returning *, 1.0 dummy;
/*
| ID | RND | DUMMY |
|----|----------------|-------|
| 11 | 0.594980469905 | 1 |
*/
nhưng bạn không thể trả về các cột nguồn:
with w as (insert into t(rnd) values(random()) returning *)
insert into t(rnd) select random() from w returning *, w.rnd;
/*
ERROR: missing FROM-clause entry for table "w": with w as (insert into t(rnd) values(random()) returning *) insert into t(rnd) select random() from w returning *, w.rnd
*/
Có cách nào tôi có thể thoát w.rnd
khỏi returning
mệnh đề cuối cùng không?
db <> fiddle ở đây
UPDATE
trong câu trả lời liên quan này trên SO , nhưng điều này sẽ không hiệu quả INSERT
.