UPDATE table_01 dst
SET tenant_id = src."tenantId"
, "updatedAt" = CURRENT_TIMESTAMP(3)
FROM table_02 src
WHERE dst.user_id IS NOT NULL
AND dst.user_id = src.uid
AND dst.tenant_id IS DISTINCT FROM src."tenantId";
与传统单表 UPDATE 不同,本例使用了 FROM 子句引入第二个表(table_02)作为数据来源。这种多表更新语法在以下场景特别有用:
根据关联表的值更新目标表
需要从多个表获取信息来决定更新值
批量更新基于复杂条件的记录
在 MySQL 中,等效操作通常使用 JOIN 语法:
sql复制代码
UPDATE table_01 dst
JOIN table_02 src ON dst.user_id = src.uid
SET dst.tenant_id = src."tenantId"
, dst."updatedAt" = CURRENT_TIMESTAMP(3)
WHERE dst.user_id IS NOT NULL
AND dst.tenant_id IS DISTINCT FROM src."tenantId";
五、WHERE 条件深度分析
WHERE 子句是 UPDATE 语句中最关键的部分之一,它决定了哪些记录会被修改。本例中的条件包含三个部分:
dst.user_id IS NOT NULL:确保只处理 user_id 不为空的记录
dst.user_id = src.uid:关联条件,确保只更新匹配的记录
dst.tenant_id IS DISTINCT FROM src."tenantId":确保只更新实际需要修改的记录