用于从表中删除特定类型重复数据的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。在这种情况下,这种类型的副本可能不止一个,如果您是正确的,则此查询将不起作用。直到读到你的评论,我才注意到这一点。非常感谢。