【全栈老魏】批量更新,批量插入

1.更新

1.1.单个表自己更新数据

#如将表中某字段全部删除某字符串
UPDATE tableName tm
set url = replace(tm.url,'api','')
where url like '%api%';

#如将表中某字段全部拼接上某字符串
update table01 t1
set t1.url=concat(url,".action")
where 1=1;

#多个表的查询结果更新数据方式更新
update table01 t1
set t1.url=(
	select concat(url,".action")
	from table01
	where id = t1.id
)
where 1=1
UPDATE sys_menu sm

1.2. 多个表的查询结果更新数据

UPDATE
    `order` o
SET o.total_amount =
        (SELECT SUM(od.acount)
         FROM order_detail od
         WHERE od.order_id = o.id
         GROUP BY od.order_id)
WHERE o.id =
      (SELECT oo.id
       FROM (SELECT DISTINCT a.order_id AS id
             FROM order_detail a) oo
       WHERE oo.id = o.id)

原理:
我的理解:

直接操作两个子查询的结果集会报错,即update的更新参数和条件参数需要唯一。
通过对被更新表起别名,使用被更新表的字段
使得对于被更新表某一条数据,
两个子查询的结果是唯一的

(条件结果一对一,当然多对一也没问题,因为相当于多个一对一)
资料支持:
待查证

1.3.两表差异数据同步(根据条件更新A表某个字段数据为B表字段数据)

UPDATE table_name_a a 
JOIN SELECT table_name_b b 
USING(id, code)
SET a.name=b.name;

SQL之对Select结果的操作

2.插入

2.1批量插入查询结果

INSERT INTO <TABLE_NAME_1> (col1,col2)
SELECT col1,col2
FROM <TABLE_NAME_2> 
WHERE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值