Mysql 中删除某表中重复数据

admin 6月前 488

最近迷上数据采集了,但是采集数据时一时粗心没有设置同步锁,导致某些数据采集重复了,所以得去除重复数据。 找了好久一开始使用语句为:

DELETE
FROM
    NeteaseAlbum
WHERE
    AlbumId IN (
        SELECT
            AlbumId
        FROM
            NeteaseAlbum
        GROUP BY
            AlbumId
        HAVING
            count(AlbumId) > 1
    )
AND AlbumId NOT IN (
    SELECT
        min(id)
    FROM
        NeteaseAlbum
    GROUP BY
        AlbumId
    HAVING
        count(AlbumId) > 1
)

但是执行得时候发现报错了,最后结果是错误代码: [Err] 1093 - You can't specify target table 'NeteaseSong' for update in FROM

因为我们的where条件中进行了子查询,并且子查询也是针对需要进行操作的表的,mysql不支持这种查询修改的方式。所以我们改下语句查询出的数据暂存,下面是修改后得语句

DELETE
FROM
    NeteaseAlbum
WHERE
    AlbumId IN (
SELECT
        AlbumId
FROM(
        SELECT
            AlbumId
        FROM
            NeteaseAlbum
        GROUP BY
            AlbumId
        HAVING
            count(AlbumId) > 1 ) As temp
)
AND id NOT IN (
SELECT
        id
FROM(   
SELECT
        min(id) as id
    FROM
        NeteaseAlbum
    GROUP BY
        AlbumId
    HAVING
        count(AlbumId) > 1) As temp1
)
最后于 6月前 被admin编辑 ,原因:
最新回复 (0)
全部楼主
返回
发新帖