我有一个表,其中有很多重复的行,而且没有主键。 我只想删除重复的记录,但是当我尝试这样做时,它将删除所有对等记录。
如何ROWID从Postgres的表格中找到?
ROWID
在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);