多表更新mysql的命令_MySQL跨表、多表更新SQL语句总结

## Mysql跨表、多表更新SQL语句总结

MySQL可以在一个SQL语句中更新多张表的记录,也可以通过多个表之间的关联关系更新某个表的数据。

假定目前有两张表`goods`和`goods_price`表,前者是保存商品的具体信息,后者是保存商品的价格,具体的表结构如下:

```

create table goods (

`id` int unsigned primary key auto_increment,

`goods_name` varchar(30) not null default '',

`deleted_at` int unsigned default null

)engine innodb charset utf8;

create table goods_price (

`goods_id` int unsigned not null,

`price` decimal(8,2) not null default '0.00'

)engine innodb charset utf8;

insert into goods (id,goods_name) values (1,'商品1'),(2,'商品2'),(3,'商品3'),(4,'商品4'),(5,'商品5');

insert into goods_price values (1,'5.44'),(2,'3.22'),(3,'5.55'),(4,'0.00'),(5,'4.54');

```

### 在update时使用逗号分割更新

将未删除的商品的价格*0.5,具体SQL语句如下:

```

UPDATE goods as g , goods_price as p SET p.price = p.price*0.5 WHERE p.goods_id = g.id AND g.deleted_at is null;

```

### 使用inner join更新数据

```

UPDATE goods g INNER JOIN goods_price p ON g.id=p.goods_id SET p.price=p.price*0.5 where g.deleted_at is null;

```

### 更新多个表

上面的更新语句使用另一个表的条件,更新一张表,也可以更新多个表。具体SQL语句如下:

```

UPDATE goods g INNER JOIN goods_price p on g.id=p.goods_id set p.price=p.price*0.5,g.deleted_at=unix_timestamp(now()) where g.is_deleted_at is null;

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值