如何删除SQL中的重复行

时间:2014-09-12 06:38:28

标签: sql oracle oracle11g oracle10g

我想删除以下数据中的重复行。

数据:

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

2 个答案:

答案 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
  )