Updat多表关联更新

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值