亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

該刪除語句為什么在去掉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;

正在回答

6 回答

因為t1里符合

?ON t1.goods_name = t2.goods_name?

的記錄有18,19,21,22,而t2里的記錄是1819,所以不加where會把t1里的四條全部刪掉,加了

?WHERE t1.goods_id>t2.goods_id

就只會刪掉比1819大的2122。

20和23因為不符合?ON t1.goods_name = t2.goods_name?所以在前面就被排除掉了


4 回復 有任何疑惑可以回復我~
#1

Refactor易先生 提問者

非常感謝!
2015-09-18 回復 有任何疑惑可以回復我~

相當于ON條件被使用了兩次

0 回復 有任何疑惑可以回復我~
#1

亜門

確實按道理說,ON是被用了兩次才會得到這樣的結果,但是為什么ON會被用兩次?
2017-08-25 回復 有任何疑惑可以回復我~

但是在多表刪除語句中: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

1 回復 有任何疑惑可以回復我~

問了好久才搞清楚!這里有個關鍵問題老師沒講:ti LEFT JOIN t2 ON?t1.goods_name = t2.goods_name ,會得到t1所有記錄,如果循著這樣的思路加上WHERE t1.goods_id>t2.goods_id;應該刪掉20,21,22,23。


0 回復 有任何疑惑可以回復我~

如果不加where,因為是left join,是不是就會顯示左邊表的全部?

如圖所示:

http://img1.sycdn.imooc.com//568342c90001d5c203140317.jpg

加上where,就把左邊表的很多數據過濾掉,剩下的就是where條件里面的數據

0 回復 有任何疑惑可以回復我~

在t1里面大于t2的有20,21,22,23但是為什么加where條件后就只會刪除ID為21和22的記錄呢

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
與MySQL的零距離接觸
  • 參與學習       396744    人
  • 解答問題       3497    個

本課程涵蓋全部MySQL數據庫的基礎,學習MySQL數據庫的基礎知識

進入課程

該刪除語句為什么在去掉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;

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號