- A+
MySQL 可以基于多表查询更新数据。对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致。
下面我们建两张表,一张表为 product 表,用来存放产品信息,其中有产品价格字段 price;另外一张表是 product_price 表。现要将 product_price 表中的价格字段 price 更新为 product 表中价格字段 price。
1. 使用UPDATE
在 MySQL 中,可以使用“UPDATE table1 t1,table2,...,table n”的方式来多表更新,SQL 语句和运行结果如下:
UPDATE product p, product_price pp SET pp.price = p.price
WHERE p.productid= pp.productId;
2. 通过INNER JOIN(内连接)
另外一种方法是使用 INNER JOIN 来多表更新。SQL 语句如下:
UPDATE product p
INNER JOIN product_price pp ON p.productid= pp.productid
SET pp.price = p.price
3. 通过LEFT JOIN(左外连接)
也可以使用 LEFT JOIN 来做多表更新,如果 product_price 表中没有产品价格记录的话,将 product 表的 isdelete 字段设置为 1。在 product 表添加 1006 商品,且不在 product_price 表中添加对应信息,SQL 语句如下。
UPDATE product p
LEFT JOIN product_price pp ON p.productid= pp.productid
SET p.isdelete = 1
WHERE pp.productid IS NULL;
4. 通过子查询
也可以通过子查询进行多表更新,SQL 语句和执行过程如下
UPDATE product_price pp
SET price=(SELECT price*0.8 FROM product WHERE productid = pp.productid);
另外,上面的几个例子都是在两张表之间做关联,只更新一张表中的记录。MySQL 也可以同时更新两张表,如下语句就同时修改了两个表
UPDATE product p
INNER JOIN product_price pp ON p.productid= pp.productid
SET pp.price = p.price, p.dateUpdate = CURDATE()