I currently have two tables in the same postgres database:
EntityA:
| Column | type | nullable |
|---|---|---|
| id | uuid | false |
| value1 | varchar | true |
| value2 | varchar | true |
| entityB_id | foreign key | true |
EntityB:
| Column | type | nullable |
|---|---|---|
| id | uuid | false |
| value1 | varchar | true |
| value2 | varchar | true |
I know need to copy the value1 and value2 from the EntityB table into the table of EntityA, but only for the lines where the EntityB id is referenced.
I tried the following without success:
insert into EntityA (value1, value2)
select EntityB.value1, EntityB.value2
from EntityB
where EntityA.entityB_id = EntityB.id
I found other guides on how to copy data from one table to another, however not with a condition has to be met. I am currently at a loss on how to successfully copy that data. Any help is greatly appreciated!
CodePudding user response:
As far as I understand you want to update data in table A using data that is stored in B. e.g. you start with
| A | id | value1 | value2 | entityB_id |
|---|---|---|---|---|
| 1 | null | null | 2 |
| B | id | value1 | value2 |
|---|---|---|---|
| 2 | 'test' | 'test2' |
And expect the following result in A:
| A | id | value1 | value2 | entityB_id |
|---|---|---|---|---|
| 1 | 'test' | 'test2' | 2 |
Instead of INSERT you need to use UPDATE as you want to modify existing rows:
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
