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;
2.插入
2.1批量插入查询结果
INSERT INTO <TABLE_NAME_1> (col1,col2)
SELECT col1,col2
FROM <TABLE_NAME_2>
WHERE …