실제 문제의 최소 예는 다음과 같습니다.
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 <> 바이올린 여기
MS SQL Server에서는 MERGE 문만 추가 열을 리턴 할 수 있습니다. 어쩌면 postgres에서도 작동합니다.
—
Sebastian Meine