Postgres:从引用 table 复制特定字段的值仅用于匹配外键
Postgres: copy value of specific field from referenced table only for matching foreign keys
我目前在同一个 postgres 数据库中有两个 table:
实体A:
Column
type
nullable
id
uuid
false
value1
varchar
true
value2
varchar
true
entityB_id
foreign key
true
实体 B:
Column
type
nullable
id
uuid
false
value1
varchar
true
value2
varchar
true
我知道需要将 value1 和 value2 从 EntityB table 复制到 EntityA 的 table 中,但仅限于引用 EntityB id 的行。
我尝试了以下但没有成功:
insert into EntityA (value1, value2)
select EntityB.value1, EntityB.value2
from EntityB
where EntityA.entityB_id = EntityB.id
我找到了关于如何将数据从一个 table 复制到另一个的其他指南,但没有满足条件。我目前不知道如何成功复制该数据。非常感谢任何帮助!
据我了解,您想使用存储在 B 中的数据更新 table A 中的数据。例如你从
开始
A
id
value1
value2
entityB_id
1
null
null
2
B
id
value1
value2
2
'test'
'test2'
并期望 A 中出现以下结果:
A
id
value1
value2
entityB_id
1
'test'
'test2'
2
您需要使用 UPDATE
而不是 INSERT
,因为您要修改现有行:
UPDATE "EntityA" a
SET value1 = (
SELECT b."value1"
FROM "EntityB" b
WHERE b.id = a."entityB_id"
),
value2 = (
SELECT b."value2"
FROM "EntityB" b
WHERE b.id = a."entityB_id"
)
WHERE "entityB_id" IS NOT NULL
我目前在同一个 postgres 数据库中有两个 table:
实体A:
Column | type | nullable |
---|---|---|
id | uuid | false |
value1 | varchar | true |
value2 | varchar | true |
entityB_id | foreign key | true |
实体 B:
Column | type | nullable |
---|---|---|
id | uuid | false |
value1 | varchar | true |
value2 | varchar | true |
我知道需要将 value1 和 value2 从 EntityB table 复制到 EntityA 的 table 中,但仅限于引用 EntityB id 的行。
我尝试了以下但没有成功:
insert into EntityA (value1, value2)
select EntityB.value1, EntityB.value2
from EntityB
where EntityA.entityB_id = EntityB.id
我找到了关于如何将数据从一个 table 复制到另一个的其他指南,但没有满足条件。我目前不知道如何成功复制该数据。非常感谢任何帮助!
据我了解,您想使用存储在 B 中的数据更新 table A 中的数据。例如你从
开始A | id | value1 | value2 | entityB_id |
---|---|---|---|---|
1 | null | null | 2 |
B | id | value1 | value2 |
---|---|---|---|
2 | 'test' | 'test2' |
并期望 A 中出现以下结果:
A | id | value1 | value2 | entityB_id |
---|---|---|---|---|
1 | 'test' | 'test2' | 2 |
您需要使用 UPDATE
而不是 INSERT
,因为您要修改现有行:
UPDATE "EntityA" a
SET value1 = (
SELECT b."value1"
FROM "EntityB" b
WHERE b.id = a."entityB_id"
),
value2 = (
SELECT b."value2"
FROM "EntityB" b
WHERE b.id = a."entityB_id"
)
WHERE "entityB_id" IS NOT NULL