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
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
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.
Vielen Dank, und was, wenn Varchars anstelle von Ganzzahlen in Spalten? – Alexey
Was wäre wenn? Nichts würde sich ändern. –
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;
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;
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
@ Gurwinder-Singh Legacy-Code für die Quelle -> Zielklasse. In einigen Fällen sind sie in einigen nicht ähnlich – Alexey
Suchen Sie nach einer allgemeinen/ansi SQL oder bestimmten Marke? (mysql/sql-server/etc) bitte was angeben. – Dekel