【问题标题】:how can i delete one duplicate record per user in postgresql如何在 postgresql 中删除每个用户的一条重复记录
【发布时间】:2021-07-11 01:32:11
【问题描述】:

如何删除一条记录并让每个用户拥有一条唯一记录。 这意味着可能有多个相同的记录,但由不同的用户记录。一个用户不能有多个相同的记录。

例如,如果用户 1 搜索蜘蛛侠电影,那么这是一个唯一记录, 但是如果他们再次用相同的名字搜索蜘蛛侠没有区别然后删除第二个 记录。现在,如果用户 2 搜索相同的蜘蛛侠电影,则保留该记录,因为用户 2 的用户 id 与用户 1 不同,依此类推。

我的问题是如何删除用户记录并为每个用户只保留一个唯一记录。

我正在使用两个不同的表来跟踪用户并将它们与电影表进行匹配

我想删除用户表和电影表中对某个用户来说不是唯一的电影。

这是我的桌子

https://i.stack.imgur.com/yrc97.png

DELETE FROM movie_media t1
            USING accountMovie t2
            WHERE id IN
                (SELECT id
                FROM 
                (SELECT id,
                    ROW_NUMBER() OVER( PARTITION BY title
                ORDER BY id) AS row_num
                FROM movie_media ) t
                WHERE t.row_num > 1)
                AND t2."accountId" = $1

我正在寻找这样的东西

【问题讨论】:

标签: postgresql duplicates sql-delete


【解决方案1】:

您要做的第一件事是在插入重复记录之前检查它们。我在代码级别执行此操作,但您也可以在数据库级别执行此操作。一盎司的预防胜于一磅的治疗!

如果我正确理解了您的表格,您应该可以使用它来删除重复的行:

DELETE FROM movie
WHERE id IN
    (SELECT id
    FROM 
        (SELECT id,
         ROW_NUMBER() OVER( PARTITION BY id,
         mediaId
        ORDER BY  id ) AS row_num
        FROM movie ) t
        WHERE t.row_num > 1 );

【讨论】:

  • 嗯,它似乎没有删除任何一个用户的重复项
  • 它删除所有重复项我无法插入没有重复项,因为主表电影必须拥有所有用户的所有表数据,这些用户搜索他们喜欢的任何电影我想要用户 1搜索都是唯一的,所以我在节点中创建了一条删除路线,仅删除用户 1 基于该用户的 accountId 的特定电影的重复搜索关键字我不想让不同用户在电影表中的所有重复项被删除也只是用户 1
猜你喜欢
  • 1970-01-01
  • 2018-02-17
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多