为了账号安全,请及时绑定邮箱和手机立即绑定

删除表中重复项的问题

在这里删除的时候,INNER JOIN 和 LEFT JOIN 效果时一样的,我想知道为什么?

正在回答

2 回答

inner join和left join最后删除的效果是一样的。但这两条sql在执行过程中的原理是不一样的。之所以最后执行的效果相同,是因为where子句把二者查询的不同数据给过滤掉了。

  1. inner join的情况下,t2表查到了2条数据,这个结果是子查询 查到的,是固定的。t1表根据连接条件查到了4条数据,在where子句过滤之后就剩下符合条件的两条语句了。

  2. left join的情况下,t2表查到了2条数据,和上面的结果是一样的。t1表根据连接条件会将所有的结果都查出来,因为左连接是以t1表为主的。然后,在where子句过滤之后又只剩下了符合条件的两条语句了。

    综上所述,关键是在where子句。你可以这样测试一下,使用下面的两条语句查询一下:

    select * from tdb_goods AS t1 left join ( select goods_id,goods_name from tdb_goods group by goods_name having count(goods_name)>1 ) AS t2 on t1.goods_name=t2.goods_name;

    select * from tdb_goods AS t1 inner join ( select goods_id,goods_name from tdb_goods group by goods_name having count(goods_name)>1 ) AS t2 on t1.goods_name=t2.goods_name;


1 回复 有任何疑惑可以回复我~
#1

qq_乔克叔叔_03170904 提问者

谢谢。有点明白了
2017-01-17 回复 有任何疑惑可以回复我~
#2

qq_乔克叔叔_03170904 提问者

但其实我的问题可能是这样的http://www.imooc.com/qadetail/186087
2017-01-17 回复 有任何疑惑可以回复我~

因为引用的是自身的表中数据。不牵扯到多表,所以没有所谓的交集,也就效果相同

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396886    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

删除表中重复项的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信