小编典典

如何在DELETE语句中使用行的物理位置(ROWID)

sql

我有一个表,其中有很多重复的行,而且没有主键。
我只想删除重复的记录,但是当我尝试这样做时,它将删除所有对等记录。

如何ROWID从Postgres的表格中找到?


阅读 223

收藏
2021-03-23

共1个答案

小编典典

在PostgreSQL上,该行的物理位置称为CTID。

因此,如果要查看它,请使用类似QUERY的查询:

SELECT CTID FROM table_name

要在DELETE语句上使用它来删除重复的记录,请像下面这样使用它:

DELETE FROM table_name WHERE CTID NOT IN (
  SELECT RECID FROM 
    (SELECT MIN(CTID) AS RECID, other_columns 
      FROM table_name GROUP BY other_columns) 
  a);

请记住,table_name是所需的表,other_columns是要用于过滤该表的列。

IE:

DELETE FROM user_department WHERE CTID NOT IN (
  SELECT RECID FROM 
    (SELECT MIN(CTID) AS RECID, ud.user_id, ud.department_id
      FROM user_department ud GROUP BY ud.user_id, ud.department_id) 
  a);
2021-03-23