用新实体更新每一行
Update each row with a new entity
我有两个表:
CREATE TABLE public.test
(
id integer NOT NULL GENERATED ALWAYS AS IDENTITY
)
和
CREATE TABLE public.test2
(
id integer,
test_id integer
)
Table test2
有两行 (1, null) 和 (2, null)。 Table test
一无所有。现在我想通过在 test
中创建新行来填充 test_id。我每次都需要一个新实体,这样我就会有 (1, 1)、(2, 2) 等。我尝试使用 insert
语句准备 update
查询,但我不明白怎么做。这就是我的尝试:
update t2 set t2.test_id = t.id
from test2 t2 full join (INSERT INTO test(id) VALUES (default) RETURNING id) t on t2.test_id = t.id
但我得到以下信息:
ERROR: syntax error at or near "INTO"
LINE 2: from test2 t2 full join (INSERT INTO test(id) VALUES (defaul...
^
SQL state: 42601
Character: 65
我能以某种方式创建我想要的查询吗?
目标中只有一列 table 让事情变得有点棘手。首先使用 next_val
生成和分配新 ID 可能更简单,然后 insert
test
中的值(我们需要选项 overriding system value
插入 generated always
列,)
with t2 as (
update test2
set test_id = nextval('test_id_seq')
where test_id is null
returning test_id
)
insert into test(id) overriding system value
select test_id from t2
我有两个表:
CREATE TABLE public.test
(
id integer NOT NULL GENERATED ALWAYS AS IDENTITY
)
和
CREATE TABLE public.test2
(
id integer,
test_id integer
)
Table test2
有两行 (1, null) 和 (2, null)。 Table test
一无所有。现在我想通过在 test
中创建新行来填充 test_id。我每次都需要一个新实体,这样我就会有 (1, 1)、(2, 2) 等。我尝试使用 insert
语句准备 update
查询,但我不明白怎么做。这就是我的尝试:
update t2 set t2.test_id = t.id
from test2 t2 full join (INSERT INTO test(id) VALUES (default) RETURNING id) t on t2.test_id = t.id
但我得到以下信息:
ERROR: syntax error at or near "INTO"
LINE 2: from test2 t2 full join (INSERT INTO test(id) VALUES (defaul...
^
SQL state: 42601
Character: 65
我能以某种方式创建我想要的查询吗?
目标中只有一列 table 让事情变得有点棘手。首先使用 next_val
生成和分配新 ID 可能更简单,然后 insert
test
中的值(我们需要选项 overriding system value
插入 generated always
列,)
with t2 as (
update test2
set test_id = nextval('test_id_seq')
where test_id is null
returning test_id
)
insert into test(id) overriding system value
select test_id from t2