MySQL 根据一个表的字段值,更新另一个表的字段


UPDATE member_info SET
dept_id=(SELECT dept_id FROM sys_user WHERE SYS_USER.ID=member_info.user_id) ,
dept_name=(SELECT dept_name FROM sys_user WHERE SYS_USER.ID=member_info.user_id)

语句改进

UPDATE member_info mpr
JOIN sys_user su ON mpr.user_id = su.id
SET mpr.dept_id = su.dept_id,
    mpr.dept_name = su.dept_name

如果只需要更新部分记录,添加 WHERE 条件:

UPDATE member_promoter_relation mpr
JOIN sys_user su ON mpr.user_id = su.id
SET mpr.dept_id = su.dept_id,
    mpr.dept_name = su.dept_name
WHERE mpr.dept_id IS NULL OR mpr.dept_name IS NULL  -- 示例条件

改进优势

  1. 性能更好:JOIN 操作通常比相关子查询更高效,特别是对于大表
  2. 可读性更强:JOIN 语法更清晰表达表之间的关系
  3. 单次扫描:原始语句可能对 sys_user 表扫描两次,改进后只扫描一次

如果 sys_user 表的 ID 字段是主键或有索引,这个查询会非常高效。

posted @ 2025-08-12 09:17  VipSoft  阅读(40)  评论(0)    收藏  举报