mysql update

  • 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()

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: