首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 跨表 UPDATE 多表更新 SQL 語句總結

     編輯:MySQL 資料庫相關知識

跨表更新場景介紹

假設有兩張表:product(產品信息,含價格欄位 price)和 productPrice(產品價格表)。需求是將 productPrice 表中的價格更新為 product 表價格的 80%。

方式一:逗號分隔多表(隱式連接)

UPDATE product p, productPrice pp
SET pp.price = pp.price * 0.8
WHERE p.productId = pp.productId
  AND p.dateCreated < '2004-01-01';

方式二:使用 INNER JOIN(推薦)

UPDATE product p
INNER JOIN productPrice pp
  ON p.productId = pp.productId
SET pp.price = pp.price * 0.8
WHERE p.dateCreated < '2004-01-01';

語義明確,易於閱讀與維護,生產環境首選。

方式三:使用 LEFT JOIN 處理無匹配記錄

若 productPrice 中無對應價格記錄,則將 product 表的 isDeleted 標記為 1:

UPDATE product p
LEFT JOIN productPrice pp
  ON p.productId = pp.productId
SET p.deleted = 1
WHERE pp.productId IS NULL;

進階:單條語句同時更新多張表

跨表更新不限於單表,可同時修改多表字段:

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';

此例同時更新了 productPrice.price 和 product.dateUpdate 兩個字段。

總結

MySQL 跨表 UPDATE 支援隱式連接、INNER JOIN、LEFT JOIN 等多種語法,且能在單條語句中更新多張表。建議使用顯式 JOIN 語法,邏輯更清晰。配合上一篇《MySQL 跨表 DELETE》可全面掌握多表寫操作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved