首页 > 解决方案 > MySQL UPDATE 与 JOINS 使用 MAX

问题描述

我不是 MySQL 大师。我正在尝试从列中获取update表格。clients.convertedprojects.last_update

DATETIME:(clients.converted截至目前的新列)。

日期时间projects.last_update

布尔值projects.converted

对于每个客户的项目,都有可能以转换结束项目,如果是这样,我愿意。prospect-to-client (boolean) projects.convertedTRUE

我想要的UPDATEclientsclients.converted项目MAX(projects.last_update) WHEREprojects.converted = true.

到目前为止,我已经尝试了几个查询,但是这个以一种不那么令人困惑的方式掌握了这个想法:

UPDATE clients AS `Client`
INNER JOIN projects AS `Project` ON Project.client_id = Client.id
SET Client.converted = MAX(Project.last_update)
WHERE Project.converted = TRUE;

但它不起作用(因为我不能MAX直接在赋值时使用函数)而且我已经没有关于如何UPDATE使用应用于列JOINS的函数的想法。MAXDATETIME

我做了一个SELECT声明来首先收集我需要的信息,它就像一个魅力:

SELECT Client.id,  count(*), MAX(Project.last_update)  FROM projects AS `Project`
LEFT JOIN clients AS `Client` ON Client.id = Project.client_id
WHERE Project.converted = TRUE
GROUP BY Client.id;

很感谢任何形式的帮助!提前致谢。

标签: mysql

解决方案


MAX 是一个聚合函数,这意味着它不能(或者更确切地说,通常不应该)在没有 GROUP BY 的情况下使用;您需要使用子查询。

UPDATE clients AS `Client`
INNER JOIN (SELECT client_id, MAX(last_update) AS max_lu 
            FROM projects 
            WHERE converted = TRUE
            GROUP BY client_id
) AS `Project` ON Project.client_id = Client.id
SET Client.converted = Project.max_lu
;

推荐阅读