多表刪除的理解
?首先,通過以下代碼對tdb_goods表進(jìn)行查詢,得到一個(gè)臨時(shí)的參照表。
?
???查詢代碼如下:
????這段代碼的意思是:
????????1、查詢的字段是:tdb_goods表中的good_id, goods_name。
????????2、查詢的對象是: count(goods_name) >= 2。即,查詢tdb_goods表中?goods_name這一列存在重復(fù)的記錄。
????????3、對查詢到的記錄進(jìn)行分組。GROUP BY goods_name意思是:如果goods_name列存在多條重復(fù)的記錄,則只顯示查找到的第一條記錄,并過濾掉后面重復(fù)的記錄。由于事先并沒有使用ORDER BY對記錄排序,默認(rèn)的查找順序應(yīng)該是記錄插入的順序。即此時(shí)查詢到的第一條記錄,就是最先插入的記錄。
?
然后,以上面查詢得到的表為參照,對原表(即tdb_goods)進(jìn)行刪除操作:
代碼如下:
這段代碼我是這樣理解的:
????1、DELETE t1 ????表示要在t1表中刪除記錄,t1 即 tdb_goods。
????2、t1 LEFT JOIN t2 ????將t1與t2(即上面的參照表)連接起來,連接方式是LEFT JOIN。當(dāng)然這里也可以用別的連接方式,比如:INNER JOIN/ RIGHT JOIN 結(jié)果都是一樣的。
????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的所有記錄。
2017-05-18
分析的很不錯(cuò)!
2019-04-04
很有啟發(fā),這段代碼應(yīng)該分成三點(diǎn)分析,
?1、DELETE t1 ????表示要在t1表中刪除記錄,t1 即 tdb_goods。
?2、t1 LEFT JOIN t2 ????將t1與t2(即上面的參照表)連接起來,(形成一個(gè)新的虛擬的表)連接方式是LEFT JOIN。當(dāng)然這里也可以用別的連接方式,比如:INNER JOIN/ RIGHT JOIN 結(jié)果都是一樣的。ON t1.goods_name = t2.goods_name ????連接的條件
大家可以把這個(gè)左連接的表單獨(dú)顯示出來,用如下語句:
得到的結(jié)構(gòu)
3 、WHERE t1.goods_id > t2.goods_id;? ?這里表示的是:刪除t1中?t1.goods_id > t2.goods_id的所有記錄。