如何使用从另一个表计算的数据更新表

问题描述

我正在尝试使用他们的加入日期更新用户帐户表,这些表是一对多/无集合。对于成员加入的每个公会,members_guild 表将有 1 个或多个条目,我想用最早的日期更新 members 表。我做了一个 dbfiddle 来帮助解释。

如您所见,有 3 个用户user3 不再属于任何公会,但我想将它们保留在数据库中以进行日志记录,他们的创建日期现在可以设置为 1970(生病了稍后手动修复它们)并且 user1 在 2 个公会中并且应该将它们的 members.created 设置为 2018-05-08 05:22:38

https://dbfiddle.uk/?rdbms=mariadb_10.5&fiddle=1d78120e695544cbd9dcece976c82f16

我在 fiddle 中尝试过 UPDATE 但它不起作用,我假设我需要执行子查询或 group by 但从未在更新语句中执行过它们

谢谢

解决方法

试试这个 -

update members t1
inner join (select account,min(date_joined) date_joined from members_guild group by account) t2 
on t1.account = t2.account 
set t1.created = t2.date_joined
,

如果存在则用 min() 更新 members.created,否则保持原样。

UPDATE `members` m
SET m.created = coalesce(
      (SELECT MIN(mg.date_joined) 
      FROM `members_guild` mg
      WHERE m.account = mg.account),m.created) ;