Delete all but one duplicate record

后端 未结 5 1742
猫巷女王i
猫巷女王i 2020-12-04 18:23

I have a table that is supposed to keep a trace of visitors to a given profile (user id to user id pair). It turns out my SQL query was a bit off and is producing multiple p

5条回答
  •  爱一瞬间的悲伤
    2020-12-04 18:30

    ANSI SQL Solution

    Use group by in a subquery:

    delete from my_tab where id not in 
    (select min(id) from my_tab group by profile_id, visitor_id);
    

    You need some kind of unique identifier(here, I'm using id).

    MySQL Solution

    As pointed out by @JamesPoulson, this causes a syntax error in MySQL; the correct solution is (as shown in James' answer):

    delete from `my_tab` where id not in
    ( SELECT * FROM 
        (select min(id) from `my_tab` group by profile_id, visitor_id) AS temp_tab
    );
    

提交回复
热议问题