先说一下多表删除的语法(两种):
delete t1 from t1,t2 where t1.id=t2.id and t1.name=t2.name;
意思是:从t1表中删除t1,t2两张表中id和name相同的记录
这个方式对于找条件相同的很适用,但是对于其他则不是很适用,
比如delete t1 from t1,t2 where t1.name!=t2.name;
则会删除t1中所有的记录, where t1.name!=t2.name;这个句子类似于
两个嵌套的for循环,所以会出现上面的情况。
这时,用内连接(inner join),外链接(left join,right join)就很方便了,
delete t1 from t1 left join t2 on t1.name=t2.name where t2.name=null;
就可以删除t1中两表name不同的记录,其实这也类似两个嵌套的for循环
if中的条件就是on后where之前的,where是对t1 left join t2 on t1.name=t2.name
结果的再筛选。
假设t1,t2两张表都是两个字段,id和name
select id,name from t1 left join t2 on t1.name=t2.name;可以理解为以下:
for(t1){
for(t2){
if(t1["name"]==t2["name"]) print( t1['id'],t1['name'],t2['id'],t2['name']);
else print( t1['id'],t1['name'],null,null);
}
}
所以where t2.name=null可以查询出不一样的记录