我有一个以下的PostgreSQL表:
CREATE TABLE users (
user_id INTEGER DEFAULT nextval('users_user_id_seq') NOT NULL,
user_old_id CHARACTER VARYING(36),
created_by INTEGER,
created_by_old character varying(36),
last_updated_by INTEGER,
last_updated_by_old character varying(36),
CONSTRAINT users_pkey PRIMARY KEY (user_id)
);
根据此表中的数据,我需要进行以下更新:
对于每一行中
created_by_old = user_old_id
的记录,请使用此表中的user_id
更新created_by
字段。请注意,created_by_old
可能为NULL,在这种情况下必须避免更新。对于每一行中
last_updated_by_old = user_old_id
的记录,请使用此表中的user_id
更新last_updated_by
字段。请注意,last_updated_by_old
可能为NULL,在这种情况下必须避免更新。
以下是样例数据:
实际情况:
user_id | user_old_id | created_by | created_by_old | last_updated_by | last_updated_by_old
--------------------------------------------------------------------------------------------
1 | aaa | | ccc | | bbb
--------------------------------------------------------------------------------------------
2 | bbb | | ddd | | aaa
--------------------------------------------------------------------------------------------
3 | ccc | | | | ddd
--------------------------------------------------------------------------------------------
4 | ddd | | aaa | |
期望:
user_id | user_old_id | created_by | created_by_old | last_updated_by | last_updated_by_old
--------------------------------------------------------------------------------------------
1 | aaa | 3 | ccc | 2 | bbb
--------------------------------------------------------------------------------------------
2 | bbb | 4 | ddd | 1 | aaa
--------------------------------------------------------------------------------------------
3 | ccc | | | 4 | ddd
--------------------------------------------------------------------------------------------
4 | ddd | 1 | aaa | |
我认为可以使用子查询来实现,但我现在无法自己想出如何实现此查询。请帮忙。