我有table_a
和a_audit
。 table_a
具有列 id
、client_id
、originating_client_id
。 a_audit
具有相同的列;它用于跟踪 table_a
的更改。
我有这个选择查询来获取table_a
中的所有行,其中client_id为NULL,originating_client_id为NULL,并且审计表中有一行包含client_id:
select t.id,
t.client_id,
t.originating_client_id,
a.client_id
from table_a t
inner join a_audit a
on a.id = t.id
where t.client_id is null
and t.originating_client_id is null
and a.client_id is not null
group by ur.user_role_id /* not necessary? */
我想要做的是:对于table_a
中的每一行,其中client_id IS NULL
和originating_client_id IS NULL
,找到第一行具有相同 id
且具有 client_id
的 a_audit
,然后设置 table_a.originating_client_id
= client_id
来自 a_audit
最佳答案
获取 a_audit
中每个 id
具有最小 updated_on
且 client_id
而非 的所有行null
并连接到 table_a
:
update table_a t inner join (
select a.* from a_audit a
where a.client_id is not null
and not exists (
select 1 from a_audit
where id = a.id and updated_on < a.updated_on
)
) a on a.id = t.id
set t.originating_client_id = a.client_id
where t.client_id is null and t.originating_client_id is null
关于MySQL:基于两列内连接进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57662312/