多表删除的时候使用左连接?
我知道前面好多人问了这个问题,我也去全部翻阅了,然后还是没能得到答案。实在是不理解~
在这节课4:45处,老师要删除表1内有重复的记录,重复记录里面删掉ID较高的。他的代码是这样的。
******************************************************************
DELETE t1 FROM tdb_goods AS t1 LEFT JOIN (SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name) >=2) AS t2 ON t1.goods_name = t2.goods_name WHERE t1.goods_id > t2.goods_id;
************************************************************************
按照我的理解,左连接,是显示左表的全部和右表内符合条件的。在这里如果不加where条件的话,应该是删除了t1整个表的吧。
那加了 WHERE t1.goods_id > t2.goods_id; 之后,对结果进行了筛选。符合条件的应该是,id=20/21/22/23这四条记录,那删除应该也是删除这四条,为什么会变成是只删除了两条呢?
*************************************************************************
如果想要达成结果集内是18/19/21/22的话,应该使用内连接才对,因为内连接仅仅显示符合连接条件的记录。我测试使用内连接,结果也是和老师的一样的。
所以我的问题是:为什么在这里使用左连接 ?为什么使用了左连接的话不是删除了20/21/22/23这四条记录,而是只删除了21和22?
求大神指点!( >﹏<。)~