これが私の実世界の問題の最小限の例です:
create table t(id serial primary key, rnd double precision);
もちろん、挿入した列をreturning
句で返すことができます:
with w as (insert into t(rnd) values(random()) returning *)
insert into t(rnd) select random() from w returning *;
/*
| ID | RND |
|----|----------------|
| 9 | 0.203221440315 |
*/
リテラルを返すこともできます:
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 |
*/
ただし、ソース列を返すことはできません。
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
*/
w.rnd
最終returning
節から抜け出す方法はありますか?
db <> fiddle here
MS SQL Serverでは、MERGEステートメントのみで追加の列を返すことができます。たぶんそれはpostgresでも機能するでしょう。
—
セバスチャンマイネ