0

我们的“用户”数据库表有许多计数列,我们希望这些列与用户添加到其他表(例如“照片”)的内容保持同步。我们一直在使用以下方法来实现这一点:

update users u join (
    select user_id,count(*) as c
    from photos
    where status='A' group by user_id) p ON p.user_id=u.user_id
set u.photos=p.c;

然而我们最近注意到,如果用户添加照片然后删除所有照片,上面的查询永远不会将“照片”列重置为 0。删除照片的方式是“照片”表中的“状态”列发生了变化状态“D”。我已经尝试了上述查询的许多排列,但没有任何运气。

我希望具有更多 MySQL 专业知识的人可以建议一个更新的查询,将“用户”表中的“照片”计数列正确重置为 0。提前感谢您的帮助!

4

1 回答 1

1

问题是没有匹配项时连接失败。您可以通过使用条件聚合来解决此问题:

update users u join
       (select user_id, sum(status='A') as c
        from photos
        group by user_id
       ) p
       ON p.user_id = u.user_id
  set u.photos = p.c;
于 2013-08-20T16:40:15.370 回答