MySQL多表连接删除问题相关

转载自:http://blog.sina.com.cn/s/blog_4c197d420101aeqr.html

DELETE是一个蛮慎重的SQL操作,一般来说这样删除操作都需要谨慎小心,以免造成不必要的损失。

DELETE有下面这几种情况

Ø  delete from t1 where 条件

Ø  delete t1 from t1 where 条件

Ø  delete t1 from t1,t2 where 条件

Ø  delete t1,t2 from t1,t2 where 条件

简单地说就是delete语句是无法进行多表删除数据操作,不过可以通过建立级联删除,在两个表之间建立级联删除关系,来实现删除一个表的数据时,同时删除另一个表中相关的数据。

举例说明:

1)       从数据表MV中把那些id值在数据表Track里有匹配的记录全删除

DELETE MV

FROM MV,Track

WHERE Track.trkid=MV.mvid

等同于

DELETE FROM MV

USING MV,Track

WHERE Track.trkid=MV.mvid

2)       从数据表MV里在数据表Track里没有匹配的记录查找出来并删除掉

DELETE MV

FROM MV

LEFT JOIN Track

ON MV.mvid=Track.trkid

WHERE Track.trkid IS NULL

等同于

DELETE FROM MV

USING MV

LEFT JOIN Track

ON MV.mvid=Track.trkid

WHERE Track.trkid IS NULL

3)       从两个表中找出相同记录的数据并把两个表中的数据都删除掉

DELETE MV,Track

FROM MV

LEFT JOIN Track

ON MV.mvid=Track.trkid

WHERE MV.mvid=1

用别名的方式:

DELETE t1,t2

FROM MV t1

LEFT JOIN Track t2

ON t1.mvid=t2.trkid

WHERE t1.mvid=2

※ 以下两种情况会报错:

delete MV,Track

from MV as t1

left join Track as t2

on t1.mvid=t2.trkid

where t1.mvid=5

***********************

DELETE t1,t2

FROM MV t1

LEFT JOIN Track t2

ON t1.mvid=t2.trkid

WHERE MV.mvid=2

so 如果使用了别名的方式,那么上下一致都用别名。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值