mysql如何刪除表中的重復行并保留id較小(或者較大)的記錄

??????? 在實際錄入數據庫的過程中,如果數據量比較大的話,難免會因為一些原因,而錄入多條重復的記錄,那么應該如何操作才能刪除重復行,并且保留一條id較大,或者較小的記錄呢。

??????? 在本例中所用數據表結構如下所示tdb_goods

mysql如何刪除表中的重復行并保留id較小(或者較大)的記錄

??????? 表中數據重復如圖所示

mysql如何刪除表中的重復行并保留id較小(或者較大)的記錄

??????? 首先第一步,利用group by分組查出每組中數目大于2的(即重復記錄的)內容

mysql>?SELECT?goods_id,goods_name?FROM?tdb_goods?GROUP?BY?goods_name?HAVING?COUN  T(goods_name)>=2;  +----------+------------------------------+  |?goods_id?|?goods_name???????????????????|  +----------+------------------------------+  |???????20?|?X3250?M4機架式服務器?2583i14????????????|  |???????19?|?商務雙肩背包??????????????????????????|  +----------+------------------------------+  2?rows?in?set?(0.01?sec)

??????? 然后使用LEFT JOIN使原始表和上述查詢結果進行連接,刪除重復記錄,保留id較小的記錄

mysql>?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_na  me?=?t2.goods_name?WHERE?t1.goods_id>t2.goods_id;  Query?OK,?2?rows?affected?(0.06?sec)

??????? 從上述語句可以看出,條件是名稱相同的,然后刪除所有goods_id大的記錄。這樣就可以實現想要的效果。

??????? 如果想保留id較大的同理,如下所示

? ? ??

mysql&gt;?DELETE?t1?FROM?tdb_goods?AS?t1?LEFT?JOIN(?SELECT?max(goods_id)?AS?goods_i  d,goods_name?FROM?tdb_goods?GROUP?BY?goods_name?HAVING?COUNT(goods_name)&gt;=2)?AS  t2?ON?t1.goods_name?=?t2.goods_name?WHERE?t1.goods_id<t2.goods_id query><p>注關于表連接,如有疑問請查看JOIN的用法。<br></p> <p>?以上就是mysql如何刪除表中的重復行并保留id較小(或者較大)的記錄的內容,更多相關內容請關注PHP中文網(www.php.cn)!<br></p></t2.goods_id>
? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享