本文主要是介绍mysql sql技巧: 子查询改为连接查询涉及多个表的删除和更新,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、把子查询改为联结查询
改写匹配值的子查询 --容易
改写非匹配值的子查询
原语句:
select *
from student
where student_id not in
(select student_id
from absence);
改写为:
select student.*
from student left join absence
where student.id=abasence.id
and abasence.id is null;
二、涉及多个表的删除和更新
场景1:
某个数据表里数据行是否在另一个数据表里有匹配来删除它们
delete t1 from t1 inner join t2 on t1.td=t2.id;
场景2:
用一个数据表的内容去更新另外一个数据表
update t1,t2 set t2.a=t1.a where t2.id=t1.id;
场景3:
把两个表匹配的值都删除掉
delete t1,t2 from t1 inner join t2 on t1.id=t2.id;
场景4:
删除不匹配另外一个表的数据行
仿照
select *
from student
where id not in
(select id
from absence);
或者:
select student.*
from student left join absence
where student.id=abasence.id
and abasence.id is null;
得到删除语句
delete t1.* from t1 left join t2 on t1.id=t2.id where t2.id is null;
场景5:
涉及多个表的delete语句 可以使用select语句中的任意一个联结操作
语法,from字句列出删除的表,using用来联结表
delete from t1 using t1 inner join t2 on t1.id=t2.id;
delete from t1,t2 using t1 inner join t2 on t1.id=t2.id;
************************************************************** ** 欢迎转发,注明原文:blog.csdn.net/clark_xu 徐长亮的专栏 ** 谢谢您的支持,欢迎关注微信公众号:clark_blog **************************************************************
这篇关于mysql sql技巧: 子查询改为连接查询涉及多个表的删除和更新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!