該刪除語句為什么在去掉where條件后會把整個左邊的數據表都刪除啊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;
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;
2015-09-18
因為t1里符合
?ON t1.goods_name = t2.goods_name?
的記錄有18,19,21,22,而t2里的記錄是18和19,所以不加where會把t1里的四條全部刪掉,加了
?WHERE t1.goods_id>t2.goods_id
就只會刪掉比18和19大的21和22。
20和23因為不符合?ON t1.goods_name = t2.goods_name?所以在前面就被排除掉了
2016-04-23
相當于ON條件被使用了兩次
2016-04-23
但是在多表刪除語句中:WHERE 要與ON聯系起來使用,所以最終得到的等同于ti LEFT JOIN t2 ON?t1.goods_name = t2.goods_name(ON?t1.goods_name = t2.goods_name)WHERE t1.goods_id>t2.goods_id
2016-04-23
問了好久才搞清楚!這里有個關鍵問題老師沒講:ti LEFT JOIN t2 ON?t1.goods_name = t2.goods_name ,會得到t1所有記錄,如果循著這樣的思路加上WHERE t1.goods_id>t2.goods_id;應該刪掉20,21,22,23。
2015-12-30
如果不加where,因為是left join,是不是就會顯示左邊表的全部?
如圖所示:
加上where,就把左邊表的很多數據過濾掉,剩下的就是where條件里面的數據
2015-09-13
在t1里面大于t2的有20,21,22,23但是為什么加where條件后就只會刪除ID為21和22的記錄呢