
# 如何删除重复的行？
答：可以用如下两种方式。
- 方式一：
  该方式仅适用于分布表，且关联条件必须包含分布列，对于复制表，相同数据的ctid在各个DN上可能不一致，因此无法使用此方式删除重复行。
  ```
  --建表和插入数据。
  gaussdb=# CREATE TABLE tbl_del(c1 varchar,c2 int) distribute by hash(c1);
  gaussdb=# INSERT INTO tbl_del VALUES ('a',1),('a',1);
  gaussdb=# INSERT INTO tbl_del VALUES ('b',2),('b',2);
  gaussdb=# INSERT INTO tbl_del VALUES ('c',3);
  --查询去重后的数据。
  gaussdb=# SELECT distinct * FROM tbl_del;
   c1 | c2 
  ----+----
   b  |  2
   a  |  1
   c  |  3
  (3 rows)
  --使用如下SQL去除重复的数据。
  gaussdb=# DELETE FROM tbl_del t1 WHERE ctid <>(
      SELECT max(ctid) FROM tbl_del t2 WHERE t1.c1 = t2.c1
  );
  --查询数据。
  gaussdb=# SELECT * FROM tbl_del;
   c1 | c2 
  ----+----
   a  |  1
   b  |  2
   c  |  3
  (3 rows)
  --删除。
  gaussdb=# DROP TABLE tbl_del;
  ```
  
- 方式二：
  ```
  --建表和插入数据。
  gaussdb=# CREATE TABLE tbl_del(c1 varchar,c2 int);
  gaussdb=# INSERT INTO tbl_del VALUES ('a',1),('a',1);
  gaussdb=# INSERT INTO tbl_del VALUES ('b',2),('b',2);
  gaussdb=# INSERT INTO tbl_del VALUES ('c',3);
  --查询去重后的数据。
  gaussdb=# SELECT distinct * FROM tbl_del;
   c1 | c2 
  ----+----
   b  |  2
   a  |  1
   c  |  3
  (3 rows)
  --复制一张表tbl_del2。
  gaussdb=# CREATE TABLE tbl_del2 AS SELECT * FROM tbl_del;
  --清空tbl_del表,并插入去重后的数据。
  gaussdb=# TRUNCATE TABLE tbl_del;
  gaussdb=# INSERT INTO tbl_del SELECT distinct * FROM tbl_del2;
  --查询。
  gaussdb=# SELECT * FROM tbl_del;
   c1 | c2 
  ----+----
   b  |  2
   a  |  1
   c  |  3
  (3 rows)
  --删除。
  gaussdb=# DROP TABLE tbl_del,tbl_del2;
  ```
  
 
