2017-08-23 3 views
0

Wenn ich eine Tabelle:SQL Entfernen Sie doppelte Kombination

X1  X2 
    1  2 
    2  1 
    3  2 

Ich möchte die duplizierten Paare unabhängig davon zu entfernen, ob sie in X1 oder X2 sind und zurück entweder

X1  X2 
    1  2 
    3  2 

oder

X1  X2 
    2  1 
    3  2 

Gibt es eine Möglichkeit, dies zu tun?

+2

Warum haben Sie mysql, sql, oracle hinzugefügt? Ich denke, dass Ihr Problem mit einem einzelnen Tag zusammenhängt? –

Antwort

0

Wenn Sie andere Spalten haben und die Paare erscheinen nur einmal (in beide Richtungen):

select t.* 
from t 
where t.x1 <= t.x2 
union all 
select t.* 
from t 
where t.x1 > t.x2 and 
     not exists (select 1 from t t2 where t2.x1 = t.x2 and t2.x2 = t.x1); 
+0

Vielen Dank. Dies löst mein Problem perfekt. – Rtab

0

Obwohl nicht Teil der SQL-Standards (das ist, was der sql Tag bezieht sich auf), unterstützt die meisten DBMS die greatest() und least() Funktionen:

select distinct least(x1, x2) as x1, greatest(x1,x2) as x2 
from the_table; 
+0

Welche Version von sql Server könnte größten() und mindestens() Funktionen unterstützen –

+1

@ Srini131 Ich denke, SQL Server ist einer der wenigen DBMS nicht zu unterstützen –

+0

@ a_horse_with_no_name Ich versuchte in SQL Server Ich habe Fehler, danke für die Antwort –

0

Wählen Sie immer zuerst den kleinsten Wert. Tun Sie UNION, um Duplikate zu entfernen.

select x, y from table where x <= y 
union 
select y, x from table where x > y 
Verwandte Themen