问题描述
我正在尝试使用他们的加入日期更新用户帐户表,这些表是一对多/无集合。对于成员加入的每个公会,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) ;