删除表中重复项的问题
在这里删除的时候,INNER JOIN 和 LEFT JOIN 效果时一样的,我想知道为什么?
在这里删除的时候,INNER JOIN 和 LEFT JOIN 效果时一样的,我想知道为什么?
2017-01-17
inner join和left join最后删除的效果是一样的。但这两条sql在执行过程中的原理是不一样的。之所以最后执行的效果相同,是因为where子句把二者查询的不同数据给过滤掉了。
inner join的情况下,t2表查到了2条数据,这个结果是子查询 查到的,是固定的。t1表根据连接条件查到了4条数据,在where子句过滤之后就剩下符合条件的两条语句了。
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;
举报