我正在使用带有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行。
答案 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 |