多表删除的理解
首先,通过以下代码对tdb_goods表进行查询,得到一个临时的参照表。
查询代码如下:
这段代码的意思是:
1、查询的字段是:tdb_goods表中的good_id, goods_name。
2、查询的对象是: count(goods_name) >= 2。即,查询tdb_goods表中 goods_name这一列存在重复的记录。
3、对查询到的记录进行分组。GROUP BY goods_name意思是:如果goods_name列存在多条重复的记录,则只显示查找到的第一条记录,并过滤掉后面重复的记录。由于事先并没有使用ORDER BY对记录排序,默认的查找顺序应该是记录插入的顺序。即此时查询到的第一条记录,就是最先插入的记录。
然后,以上面查询得到的表为参照,对原表(即tdb_goods)进行删除操作:
代码如下:
这段代码我是这样理解的:
1、DELETE t1 表示要在t1表中删除记录,t1 即 tdb_goods。
2、t1 LEFT JOIN t2 将t1与t2(即上面的参照表)连接起来,连接方式是LEFT JOIN。当然这里也可以用别的连接方式,比如:INNER JOIN/ RIGHT JOIN 结果都是一样的。
3、ON t1.goods_name = t2.goods_name 连接的条件
4、WHERE t1.goods_id > t2.goods_id; 这里表示的是:删除t1中 t1.goods_id > t2.goods_id 且 t1.goods_name=t2.goods_name的所有记录。