我想删除以下数据中的重复行。
数据:
a a
a b
a c
a d
a e
b a
b b
b c
b d
b e
c a
c b
c c
c d
c e
d a
d b
d c
d d
d e
e a
e b
e c
e d
e e
输出应该是column1和column2不同。 它不应该是以下数据。
a b
a c
a d
a e
b a
b c
b d
b e
c a
c b
c d
c e
d a
d b
d c
d e
e a
e b
e c
e d
因为列1中的列1和列2中的b与列1中的b和列2中的b相同,或者我只是说1 + 2与2 + 1相同。
所以,输出应该是
a,b
a,c
a,d
a,e
b,c
b,d
b,e
c,d
c,e
d,e
答案 0 :(得分:2)
select distinct least(column_1, column_2), greatest(column_1, column_2)
from the_table
where column_1 <> column_2;
答案 1 :(得分:1)
这应该通过一些重新洗牌给你所需要的东西:
SELECT DISTINCT LEAST(column1, column2) as column1, GREATEST(column1, column2) as column2
FROM myTable
如果您想将值保留在原来属于的列中,请尝试以下操作:
WITH cte AS
( SELECT t.*, ROW_NUMBER() OVER () RN
FROM myTable t)
SELECT * FROM cte t
WHERE NOT EXISTS (
SELECT * FROM cte
WHERE
t.column1 IN (column1, column2) AND
t.column2 IN (column1, column2) AND
t.RN > RN
)