Delete all but one duplicate record

后端 未结 5 1731
猫巷女王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:27

    Here's Frank Schmitt's solution with a small workaround utilizing a temporary table to allow his solution to work on MySQL:

    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
    )
    
    0 讨论(0)
  • 2020-12-04 18:27

    This will work:

    With NewCTE
    AS
    (
    Select *, Row_number() over(partition by ID order by ID)as RowNumber from 
    table_name
    )
    Delete from NewCTE where RowNumber > 1
    
    0 讨论(0)
  • 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
    );
    
    0 讨论(0)
  • 2020-12-04 18:34

    Select all unique rows
    Copy them to a new temp table
    Truncate original table
    Copy temp table data to original table

    That's what I'd do. I'm not sure if there's 1 query that would do all this for you.

    0 讨论(0)
  • 2020-12-04 18:47

    If you are using SQL you can manually delete the duplicate rows keeping one entry just follow this procedure:

    1. Go into your table where you have duplicate data.
    2. Apply the filter to segregate duplicate data for each individual id
    3. Select all the rows you want to delete.
    4. Press delete and save the result.
    5. Repeat the process for each id you have duplicate entries for.

    It's a long procedure but you can see the results immediately in real-time.

    Hope this solution worked for you!!

    0 讨论(0)
提交回复
热议问题