Mysql根据字段查询和删除重复数据

2019-02-25  本文已影响0人  caopengflying

实际开发中遇到一个问题,线上系统报错,需要手动向库里插入数据,然后点了两次手动发送按钮,导致库中有重复的数据。需求:根据某个字段查询重复数据并删除

1.查询出所有数据进行分组之后,和重复数据的重复次数的查询数据,先列下:

select * from table1 t1 where (t1.username) in  (select username from table1 group by username  having count(*) > 1)

2.删除重复数据并保留id最小的数据(以下是搜出来的)

delete from people 
where peopleId  in (select  peopleId  from people  group  by  username   having  count(username) > 1)
and rowid not in (select min(rowid) from  people  group by username  having count(username )>1)

但是执行会报错,

You can't specify target table for update in FROM clause

意思是说mysql中You can't specify target table <tbl> for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。
这是需要一个中间临时表,将删除改成以下

delete from 
people 
where 
peopleId in 
    (select peopleId 
        from 
        (select id from people 
            where 
            peopleId in     (select peopleId from people group by username having count(username)>1) 
            and peopleId not in(select min(peopleId) from people group by username having count(username)>1)
        ) as tmpresult
    )

多字段属性删除

DELETE
FROM
    user_organization_access a
WHERE
        (a.user_id, a.organization_id) IN (
            select user_id,
                   organization_id from (
        SELECT
            user_id,
            organization_id
        FROM
            user_organization_access
        GROUP BY
            user_id,
            organization_id
        HAVING
                count(*) > 1)t1
    )
  AND organization_login_id NOT IN (
      select * from (
    SELECT
        min(organization_login_id)
    FROM
        user_organization_access
    GROUP BY
        user_id,
        organization_id
    HAVING
            count(*) > 1) t
)

上一篇下一篇

猜你喜欢

热点阅读