0

我有一个 MySQL 表department_members,其中包含单个部门中每个人的字符串字段 ( member_name) 和 int 字段 ( ) 的行。当前对所有行都为 NULL。recent_actionsRecent_actions

我有另一个更大的表company_actions,其中包含整个公司中的某个人在过去一年中每次执行此类操作时的一行。每行都有一个member_name, timestamp,和一个唯一的action_id

我想更新department_members.recent_actions该成员在过去两周内执行该类型操作的次数。如果他们最近没有执行任何操作,我想department_members.recent_actions用 0 更新。

我尝试了各种 CASE 和 IF 方法,但我无法正确使用语法。

在伪代码中,这就是我想要做的:

UPDATE department_members AS d,
  (SELECT COUNT(action_id) AS recent, member_name 
      FROM company_actions 
         WHERE timestamp > DATE_SUB(NOW(), INTERVAL 14 DAY) AS tmp
/* then do something like this, only for real: */
IF d.member_name IN tmp(member_names) THEN d.recent_actions = tmp.recent 
    WHERE d.member_name = tmp.member_name
ELSE IF d.member_name NOT IN tmp(member_names) THEN d.recent_actions = 0

希望这能理解我的目标吗?任何帮助,将不胜感激!整天都在努力解决这个问题。

4

1 回答 1

1

加入一个子查询,该子查询使用计算表department_members中的总数。action_idcompany_actionsLEFT JOIN

返回参数列表中的COALESCE()第一个非空值。

UPDATE  department_members a
        LEFT JOIN 
        (
            SELECT  member_name, COUNT(*) TotalAction
            FROM    company_actions
            WHERE   timestamp > DATE_SUB(NOW(), INTERVAL 14 DAY)
            GROUP   BY member_name
        ) b ON a.member_name = b.member_name
SET     a.action_id = COALESCE(b.TotalAction, 0)
于 2013-10-23T01:15:09.393 回答