
MySQL学习笔记:表的备份和重命名、临时表的使用和not int的替换写法
发布日期:2021-05-07 04:23:31
浏览次数:21
分类:精选文章
本文共 1410 字,大约阅读时间需要 4 分钟。
今天被下面的SQL搞了很久,总是被you can't specify target table for update in from clause
。
刚开始我是如下写法:
UPDATE xrshop.product AS aaaINNER JOIN ( SELECT we.sn, we.productId FROM warehouse.examination we WHERE we.productId IN ( SELECT p.id FROM xrshop.product AS p WHERE CODE IS NULL AND p.majorCategoryId = 17 ... 省略一些条件 )) AS b SET aaa.`code` = b.sn WHERE b.productId = aaa.id
这样总是报错:后来我改为:
UPDATE xrshop.product AS aaaINNER JOIN (select sn, productId from (SELECT we.sn, we.productId FROM warehouse.examination we WHERE we.productId IN ( SELECT p.id FROM xrshop.product AS p WHERE CODE IS NULL AND p.majorCategoryId = 17 AND p.minorCategoryId IN ( 17005, 17009, 17012, 17013, 17010, 17011, 17015 )))) AS b ) bbbSET aaa.`code` = bbb.sn WHERE bbb.productId = aaa.id
也就是对INNER JOIN
后面的查询结果集,再用select
包一下,然后就可以了;
同样地,在删除操作中,如果是删除表A的数据,而数据来源于表A的查询结果,也需要使用select
包裹:
DELETE from xrshop.product WHERE id in (select a.id from (SELECT p.id FROM xrshop.product AS p WHERE CODE IS NULL AND p.majorCategoryId = 17 AND p.minorCategoryId IN ( 17005, 17009, 17012, 17013, 17010, 17011, 17015)) as a)
至于not in
优化问题,因为not in
不走索引,所以在不得已情况下,就不要使用not in
做查询,下面使用join
来替代not in
。
比如:
select ID from A where ID not in (select ID from B)
替换为:
select A.ID from A left join B on A.ID=B.ID and B.ID is null
或者:
select A.ID from A left join B on A.ID=B.ID where B.ID is null
这种方法通过left join
和where
条件来实现not in
的效果,同时避免了不使用索引的情况。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月26日 18时13分47秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
权值初始化和与损失函数
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11
Remove Extra one 维护前缀最大最小值
2019-03-11
wgcloud运维监控系统错误:防篡改校验错误次数大于10次,不再上报数据
2019-03-11
Linux操作系统的安装与使用
2019-03-12
C++ 继承 详解
2019-03-12
OSPF多区域
2019-03-12
Docker入门之-镜像(二)
2019-03-12
数据结构——链表(3)
2019-03-12
去了解拉绳位移编码器的影响因素
2019-03-12
无法初始化Winsock2.2处理
2019-03-12
vMotion 操作失败进度卡在14% ,报错: Operation Timed out
2019-03-12
重置UAG Application admin密码
2019-03-12
Horizon Daas租户管理平台扩展分配时报:内部错误
2019-03-12
嵌入式系统试题库(CSU)
2019-03-12
【自考】之信息资源管理(一)
2019-03-12
setup facatory9.0打包详细教程(含静默安装和卸载)
2019-03-12
Linux kernel pwn --- CSAW2015 StringIPC
2019-03-12
编译android源代码(aosp)
2019-03-12