UPDATE Track
INNER JOIN MV ON Track.trkid = MV.mvid
SET Track.is_show = MV.is_show
WHERE Track.trkid < 6;
等價舊式寫法:
UPDATE Track, MV
SET Track.is_show = MV.is_show
WHERE Track.trkid = MV.mvid AND Track.trkid < 6;
UPDATE tab1
SET tab1.size = (
SELECT tab2.size FROM tab2
WHERE tab2.color = tab1.color
)
WHERE tab1.color IN (SELECT color FROM tab2);
⚠️ 子查詢**必須返回單行單列**,否則報錯 Subquery returns more than 1 row。
UPDATE customers a
SET city_name = COALESCE((
SELECT b.city_name FROM tmp_cust_city b
WHERE b.customer_id = a.customer_id
), a.city_name); -- 找不到保留原值
或指定預設值:COALESCE((subquery), '未知')。
UPDATE contact c, contactdroit cd
SET c.user_name = '$username',
c.nom = '$lastname',
c.prenom = '$firstname',
c.passcode = '$password',
cd.droit_id = '$droitid'
WHERE c.contact_id = '$id'
AND c.contact_id = cd.contact_id;
UPDATE product p
INNER JOIN productPrice pp ON p.productId = pp.productId
SET pp.price = pp.price * 0.8,
p.dateUpdate = CURDATE()
WHERE p.dateCreated < '2004-01-01';
LIMIT 或主鍵範圍,避免長事務、Binlog 膨脹、主從延遲。binlog_format=ROW),確保主從數據一致。