使用MAX的JOINS进行MySQL更新

时间:2019-01-07 18:10:16

标签: mysql

我不是MySQL专家。 我正在尝试从update列中clients.convertedprojects.last_update

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

DATETIME projects.last_update

布尔语projects.converted

对于每个客户的项目,可以通过prospect-to-client 转换 结束 该项目,如果可以,{ {1}}会(boolean) projects.converted吗?

我要在TRUE上执行UPDATE语句,以从clients clients.converted项目的MAX(projects.last_update)中填充WHERE

到目前为止,我已经尝试了一些查询,但是这以一种不太混乱的方式理解了这个想法:

projects.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; 函数)并且我已经用完如何使用MAXUPDATE来完成JOINS的想法了MAX函数已应用于DATETIME列。

  

我做了一个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;

非常感谢您的帮助! 预先感谢。

1 个答案:

答案 0 :(得分:2)

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
;