SQL - 同步非规范化表

时间:2014-08-11 05:25:34

标签: mysql sql denormalization

我有一个USERS表和一个LOGS表。 LOGS表已标准化,直到最近才存储user_id,当我决定出于性能原因而对其进行非规范化时。完成此更改后,我还会将usernameuser_role列作为LOGS表的一部分。

现在我需要更新LOGS表的现有记录,根据username列的值填写user_roleuser_id列,以便数据变为是一致的。如何实现这一目标?我正在寻找可以在数据库服务器上运行的SQL脚本。

阿西

1 个答案:

答案 0 :(得分:1)

使用类似的东西。您只需加入用户表

即可
UPDATE LOGS l
INNER JOIN users u ON u.id=l.user_id
SET l.username=u.name,
  l.user_role=u.role
WHERE ... if necessary

更新:

UPDATE LOGS l
INNER JOIN (select l.id as log_id, u.*
            from logs l join users u ON u.id=l.user_id
            order by l.id
            limit 10) sub ON sub.id=l.id
SET l.username=sub.name,
  l.user_role=sub.role