此表只有2列。当两个行的列匹配时,有些行被视为“重复”。
那是:
ALTER TABLE registrations
ADD CONSTRAINT proper_confirmation_status CHECK
(confirmation_status::text ~ '^(Unconfirmed|Confirmed|Rejected|NotApplicable)$');
我想删除重复项,但至少留下其中一项。因为它们是同一个东西并不重要。
我使用了col1 col2
X X
X X
X Y -- this is not a duplicate
和IN
的变体,但我似乎无法让DELETE外部查询只删除每一行中有重复列的行。
答案 0 :(得分:1)
试试这个:
DELETE a
FROM mytable a
LEFT JOIN
(
SELECT MIN(ID) ID, col1, col2
FROM mytable
GROUP BY col1, col2
) b ON a.ID = b.ID AND
a.col1 = b.col1 AND
a.col2 = b.col2
WHERE b.ID IS NULL
<强> DEMO 强>
假设ID为主键列
修改强>
但是,如果您没有ID列,那么您可以尝试这样:
ALTER IGNORE TABLE mytable
ADD UNIQUE INDEX all_columns_uq
(col1, col2) ;
<强> DEMO 强>
答案 1 :(得分:1)
ALTER IGNORE TABLE table1 ADD UNIQUE INDEX idx_name (col1,col2);
OR
CREATE TABLE table1_temp AS
SELECT * FROM table1 GROUP BY col1, col2;
TRUNCATE TABLE table1;
INSERT INTO table1 SELECT * FROM table1_temp;
DROP TABLE table1_temp;
您可能会在实时表中使用第二种方法丢失数据,但引用它的任何其他表也可能不太高兴!
我建议添加唯一索引,以便将来证明自己。