You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写满足跨表关联条件的SQL UPDATE查询语句?

解决方法

直接批量更新指定ID的记录

如果只是需要一次性把ID1和ID4的text字段设为指定值,用IN条件即可:

UPDATE employee 
SET text = 'ABCABC' 
WHERE id IN ('ID1', 'ID4');

关联Address表实现同步更新(匹配emp_num和state)

如果要基于ID1的emp_num和state,批量更新所有符合条件的记录(包括ID1和ID4),可以通过关联Address表获取匹配条件:

UPDATE employee e
JOIN address a ON e.address_id = a.address_id
SET e.text = 'ABCABC'
WHERE a.emp_num = (
    SELECT emp_num 
    FROM address 
    WHERE address_id = (SELECT address_id FROM employee WHERE id = 'ID1')
)
AND a.state = (
    SELECT state 
    FROM address 
    WHERE address_id = (SELECT address_id FROM employee WHERE id = 'ID1')
);

这条语句会找到和ID1属于同一个emp_num且同state的所有员工记录,统一更新text字段。

触发器实现自动同步(长期方案)

如果希望每次插入或更新Employee记录时,自动同步同emp_num同state的其他记录,推荐创建触发器:

DELIMITER //
CREATE TRIGGER sync_employee_text_trigger
AFTER UPDATE ON employee
FOR EACH ROW
BEGIN
    -- 获取当前更新记录对应的emp_num和state
    DECLARE target_emp_num VARCHAR(255);
    DECLARE target_state VARCHAR(255);
    
    SELECT emp_num, state INTO target_emp_num, target_state
    FROM address
    WHERE address_id = NEW.address_id;
    
    -- 同步更新符合条件的其他记录
    UPDATE employee e
    JOIN address a ON e.address_id = a.address_id
    SET e.text = NEW.text
    WHERE a.emp_num = target_emp_num
      AND a.state = target_state
      AND e.id != NEW.id;
END //
DELIMITER ;

之后只要执行你的初始更新语句:

UPDATE employee SET text='ABCABC' WHERE id='ID1';

触发器会自动把同emp_num同state的其他记录(比如ID4)的text字段同步更新为'ABCABC'。

内容的提问来源于stack exchange,提问作者Groot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:25:47