使用游标的方式删除表中相同的记录,并只留下其中一条

来源:互联网 发布:js弹出div窗口 编辑:程序博客网 时间:2024/05/22 14:02

km_tbl_grantdetail 订单表中的存在多条GrantMasterID, SongID相同的记录,影响统计和显示。需要删除重复的记录,只留下其中一条。

这个表中的数据有百多万条,使用Group By 的方法速度太慢。特用游标,速度快。


DROP PROCEDURE IF EXISTS grantDetailCursorX;

CREATE PROCEDURE grantDetailCursorX()
BEGIN
DECLARE oldGrantMasterID, curGrantMasterID, curGrantDetailID INT DEFAULT '';
DECLARE oldSongID, curSongID VARCHAR(10) DEFAULT '';


DECLARE grant_detail_cursor CURSOR FOR SELECT GrantDetailID, GrantMasterID, SongID FROM km_tbl_grantdetail ORDER BY GrantMasterID, SongID;

OPEN grant_detail_cursor;
FETCH grant_detail_cursor INTO curGrantDetailID, curGrantMasterID, curSongID;
WHILE(curGrantMasterID IS NOT NULL) DO
if(curGrantMasterID = oldGrantMasterID AND curSongID = oldSongID) THEN
DELETE FROM km_tbl_grantdetail WHERE GrantDetailID = curGrantDetailID;
ELSE
SET oldGrantMasterID = curGrantMasterID;
SET oldSongID = curSongID;
END IF;
FETCH grant_detail_cursor INTO curGrantDetailID, curGrantMasterID, curSongID;
END WHILE;
CLOSE grant_detail_cursor ;
END;


CALL grantDetailCursorX();

DROP PROCEDURE IF EXISTS grantDetailCursorX;




原创粉丝点击