如何删除具有相同信息但在不同列中的行?

时间:2019-08-06 11:57:49

标签: sql postgresql sql-delete

我正在使用带有pgAdmin的PostgreSQL数据库,并且我有一个表,该表包含2列,分别是列初始化和列末尾,因此表中的所有行都具有相同的列,但数据在相反的列中。有没有一种方法可以删除包含不同列的相同数据的所有行,并保留其中一个?像这样:

 Init - End   
1 A       B
2 B       A
3 C       D
4 D       E
5 D       C
6 E       D

我想删除第2,4和5行。

1 个答案:

答案 0 :(得分:1)

具有EXISTS:

delete from tablename t
where 
  t."Init" > t."End" 
  and
  exists (
    select 1 from tablename
    where "End" = t."Init" and "Init" = t."End"
  );

此代码将保留(例如)行A,B,并删除行B,A。
请参见demo
结果:

| Init | End |
| ---- | --- |
| A    | B   |
| C    | D   |
| D    | E   |