用于从表中删除特定类型重复数据的SQL查询

用于从表中删除特定类型重复数据的SQL查询,sql,oracle,Sql,Oracle,我得到下表: col1|col2 Hyd |Bag kol |Chi Del |Pat Bag |Hyd 我需要保留这个 Kol |Chi Del |Pat 及 我需要保留给定行中的任意一行,即: Hyd |Bag Bag |Hyd 我尝试了以下查询: SELECT * FROM test_kafee a WHERE (SELECT count(*) FROM test_kafee b WHERE a.Temp1 = b.temp2 AND a.temp

我得到下表:

col1|col2  
Hyd |Bag  
kol |Chi  
Del |Pat  
Bag |Hyd  
我需要保留这个

Kol |Chi  
Del |Pat  
及 我需要保留给定行中的任意一行,即:

Hyd |Bag  
Bag |Hyd
我尝试了以下查询:

SELECT * FROM test_kafee a WHERE  (SELECT count(*) FROM test_kafee b 
WHERE a.Temp1 = b.temp2 AND a.temp2 = b.Temp1 ) = 0
其中给出了唯一的一个,但对于重复,我无法使用此查询停止一个:

SELECT * FROM test_kafee3 a WHERE  (SELECT count(*) FROM test_kafee b 
WHERE a.Temp1 = b.temp2 AND a.temp2 = b.Temp1 ) > 0
表可能包含多个副本,如下所示:
col1 | col2
液压袋
kol|Chi
德尔帕特
袋子|液压
Chi | kol

您希望表中有所有独特的组合

SELECT col1, col2 FROM table1
WHERE col1 <= col2
UNION
SELECT col2, col1 FROM table1
WHERE col2 < col1
从表1中选择col1、col2

其中col1如果您使用的是sql server(下次,请在数据库中添加一个标记,以便我们不必猜测),您可以执行以下操作:

DECLARE @tbl table (col1 char(3), col2 char(3))

INSERT INTO @tbl
SELECT 'Hyd', 'Bag'
UNION 
SELECT 'kol', 'Chi'
UNION 
SELECT 'Del', 'Pat'
UNION 
SELECT 'Bag', 'Hyd'

SELECT DISTINCT T1.Col1, T1.Col2
FROM @tbl T1 LEFT JOIN (
    SELECT T1.Col1, T1.Col2
    FROM @tbl T1 INNER JOIN @tbl T2 ON(T1.Col1 = T2.Col2 AND T1.Col2 = T2.col1)
    ) T2 ON(T1.col1 = T2.col1 AND T1.col2 = T2.col2)
WHERE T2.col1 IS NULL

UNION ALL

SELECT TOP 1 T1.Col1, T1.Col2
FROM @tbl T1 INNER JOIN 
@tbl T2 ON(T1.Col1 = T2.Col2 AND T1.Col2 = T2.col1)

将所需行插入临时表

INSERT INTO TEMP_TABLE
SELECT col1,col2
FROM YOURTABLE
MINUS
SELECT * FROM
(
  SELECT col1,col2
  FROM YOURTABLE
  INTERSECT
  SELECT col2,col1
  FROM YOURTABLE;
)
截断实际表

TRUNCATE TABLE YOURTABLE;
从临时表中重新插入记录

INSERT INTO YOURTABLE
SELECT * FROM TEMP_TABLE;

你能创造一个新的世界吗?另外,您的数据库是什么?我使用的是Oracle 11g。在这种情况下,这种类型的副本可能不止一个,如果您是正确的,则此查询将不起作用。直到读到你的评论,我才注意到这一点。非常感谢。