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;