2016-12-26 3 views
1
A | B 
===== 
1 | 2 
3 | 4 
2 | 1 

Wie kann ich diese Tabelle filtern und nur eindeutige Zeilen erhalten? So etwas Ähnliches:Herausfiltern wirklich eindeutige Zeilen

1 | 2 
3 | 4 
+1

Warum nicht nur 1, 2, 3, 4 in einer einzigen Spalte? Wenn sie ähnlich sind, wenn die Reihenfolge umgekehrt ist, müssen sie dem gleichen Zweck dienen. – GurV

+0

@ Gurwinder-Singh Legacy-Code für die Quelle -> Zielklasse. In einigen Fällen sind sie in einigen nicht ähnlich – Alexey

+0

Suchen Sie nach einer allgemeinen/ansi SQL oder bestimmten Marke? (mysql/sql-server/etc) bitte was angeben. – Dekel

Antwort

4

Ich glaube, Sie so etwas wie dies will:

select a, b 
from t 
where a <= b 
union all 
select a, b 
from t 
where a > b and 
     not exists (select 1 from t t2 where t2.a = t.b and t2.b = t.a); 

Hinweis: Dies setzt voraus, dass es in Ihren Daten keine aktuellen Duplikate sind und Sie ein nur ein Paar zu halten, unabhängig davon, die Bestellung.

+0

Vielen Dank, und was, wenn Varchars anstelle von Ganzzahlen in Spalten? – Alexey

+0

Was wäre wenn? Nichts würde sich ändern. –

0

Einfachere Version, die die Unterabfrage auslässt und tatsächliche Duplikate behandelt, indem Sie auf UNION gelehnt:

SELECT a, b FROM test WHERE a <= b 
UNION 
SELECT b, a FROM test WHERE a > b; 
1

Verwenden verschiedene

select distinct least(a,b) as a, greatest(a,b) as b 
from the_table; 

Oder wenn Ihr DBMS nicht least() und greatest() unterstützt

select distinct 
     case when a < b then a else b end as a, 
     case when a > b then a else b end as b 
from the_table; 
Verwandte Themen