删除MySQL数据表中的重复数据,并保留一份重复数据

再用python进行数据爬取的时候,把需要的字段值存入MySQL数据库,却出现了重复数据,在解决这一问题的时候遇到的坑。在此记录一下,备忘。

数据资源:链接:https://pan.baidu.com/s/14VUd5ftpUXrAz-Ka5UXk4w 提取码:gry1 

错误SQL语句:

delete
from maoyan
where id in(
           select M.id
           from maoyan M inner join (
                                    select mm.nickName
                                    from maoyan mm
                                    group by mm.movieId, mm.startTime, mm.nickName, mm.cityName, mm.score, mm.content
                                    having count(*) > 1
                                    ) m3 on M.nickName = m3.nickName
           where M.id not in(select max(M.id)
                             from maoyan M inner join (
                                                      select mm.nickName
                                                      from maoyan mm
                                                      group by mm.movieId, mm.startTime, mm.nickName, mm.cityName, mm.score, mm.content
                                                      having count(*) > 1
                                                      ) nick
                                      on M.nickName = nick.nickName
                             group by nick.nickName)
           );

报错信息:[HY000][1093] You can't specify target table 'maoyan' for update in FROM clause

以下是正确SQL语句:

delete
from maoyan
where id in(
           select MY.id
           from(
               select M.id
               from maoyan M inner join (
                                        select mm.nickName
                                        from maoyan mm
                                        group by mm.movieId, mm.startTime, mm.nickName, mm.cityName, mm.score, mm.content
                                        having count(*) > 1
                                        ) m3 on M.nickName = m3.nickName
               where M.id not in(select max(M.id)
                                 from maoyan M inner join (
                                                          select mm.nickName
                                                          from maoyan mm
                                                          group by mm.movieId, mm.startTime, mm.nickName, mm.cityName, mm.score, mm.content
                                                          having count(*) > 1
                                                          ) nick
                                          on M.nickName = nick.nickName
                                 group by nick.nickName)
               ) MY
           );

注意:在错误语句中红色字体标注部分不能直接使用,需要把这部分结果数据看成一张表,才能删除需要删除的数据。

猜你喜欢

转载自blog.csdn.net/ailian_f/article/details/86515705
今日推荐