delete from删除几张表关联和mysql几种连接查询总结

delete from删除几张表关联和mysql几种连接查询总结

一、delete from删除几张表关联

① 在多表连接时删除数据(错误删除示例):

delete  from 
	sys_role_menu s left join sys_menu m ON s.menu_id = m.menu_id 		
where 
m.sys_type=1 
and s.role_id in 		
<foreach item="roleId" collection="array" open="(" separator="," close=")">
 			#{roleId} 		
</foreach>

②这样会报错的。 而我没看出来哪里有错,改成查询(正确的查询示例):

 select * from 
sys_role_menu s left join sys_menu m ON s.menu_id = m.menu_id 		
where m.sys_type=1 
 and s.role_id in 		
<foreach item="roleId" collection="array" open="(" separator="," close=")">
			#{roleId} 		
</foreach> 

③这样是正确的。 那么问题呢? 原因是多张表关联时要指明删除的是哪张表,把别名写在delete后面。(正确删除示例)

 delete s from sys_role_menu s 
 left join sys_menu m ON s.menu_id = m.menu_id 		
 where m.sys_type=1 
 and s.role_id in 		
 <foreach item="roleId" collection="array" open="(" separator="," close=")">
		#{roleId} 	
</foreach> 

二、mysql中的内连接、左连接、右连接的区别

2.1、内连接

inner join(等值连接) 只返回两个表中联结字段相等的行

SELECT * from A INNER JOIN B ON A.Aid=B.Bname;
等同于:
SELECT * from A,B WHERE A.Aid=B.Bname;

在这里插入图片描述

2.2、left join(左联接)

返回包括左表中的所有记录和右表中联结字段相等的记录 左链接就是公共交集加上左边的A。这就意味着左边A拥有的数据全部会显示出来,但是在B中却未必有数据对应,对应不上的则为null.

SELECT * FROM A LEFT JOIN B ON A.Aid=B.Bname;

在这里插入图片描述

2.3、right join(右联接)

返回包括右表中的所有记录和左表中联结字段相等的记录。右连接就是公共交集加上右边的B

SELECT * from A RIGHT JOIN B ON A.Aid=B.Bname;

在这里插入图片描述

左连接和右连接的表述方式差不多,需要注意的是,左和右是相对来说的,根据在查询语句中表出现的先后顺序,可以分别用left join
和right join 起到相同的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神雕大侠mu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值