mysql表中兩個字段重復記錄,只保留一條記錄的操作
例如有一張學生表
其中name 和 class 相同的視為重復記錄,需要保留一條記錄,刪除重復記錄,
兩種操作方式如下:
方法一: group by
SELECT MIN(cs.id) AS id ,cs.`name` , cs.class FROM `ceshi` cs GROUP BY cs.`name` ,cs.`class`
查詢結(jié)果如下:
此操作找出了需要保留的記錄,即按name、class進行分組,取出id最小的記錄,刪除id不在上面的記錄即可,最終保留的記錄的id為1、3、4、5、6、8,原表中的2、7、9、10均為要刪除的重復記錄
刪除sql如下:
DELETE
FROM
`ceshi` cs
WHERE
cs.`id` NOT IN (
( SELECT MIN(cs.id) AS id FROM `ceshi` cs GROUP BY cs.`name` ,cs.`class`) )
方法二:關(guān)聯(lián),因為是同一張表,使用 left join 或者inner join都可以
直接寫sql如下:
delete t1
FROM ceshi t1
INNER JOIN ceshi t2
ON t1.`name` = t2.`name`
AND t1.`term` = t2.`term`
WHERE t1.id > t2.id;
同樣是保留id較小的記錄,原理如下:
運行選中的代碼,此時未加條件WHERE t1.id > t2.id;
這是找出兩張表中的name與class相同的記錄的視圖,加上判斷條件WHERE t1.id > t2.id;
:
僅查看t1的情況文章來源:http://www.zghlxwxcb.cn/news/detail-696180.html
對比元數(shù)據(jù)表,可以看到t1表中是id較大的記錄 2、7、9、10剛好就是重復的記錄,所以直接使用上面的delete t1
刪除即可文章來源地址http://www.zghlxwxcb.cn/news/detail-696180.html
到了這里,關(guān)于mysql表中刪除重復記錄,只保留一條記錄的操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!