Frage

Ich habe die folgende SQL-Tabelle:

A|B
---
w|x
x|w
y|z
z|y

Kann ich eine Abfrage erstellen, die das folgende Ergebnis ergeben:

A|B
---
w|x
y|z

Um es zusammenzufassen, ich möchte die beiden Spalten als eine ungeordnete Menge behandeln, so dass (a, b) == (b, a).

War es hilfreich?

Lösung

Die "beste" Code ist abhängig von der Datenbank, aber finden Sie dbms unabhängig:

SELECT      t.A,
            t.B
FROM        my_table t
LEFT JOIN   my_table t2
        ON  t.A = t2.B
        AND t.B = t2.A
        AND t.A < t.B
WHERE       t2.A IS NULL

Andere Tipps

Sie könnten versuchen Sie Folgendes:

SELECT LEAST(a,b) a, GREATEST(a,b) b
FROM t
GROUP BY LEAST(a,b), GREATEST(a,b)

Mit der folgenden Test-Tabelle t:

CREATE TABLE t ( a VARCHAR(1), b VARCHAR(1) );

INSERT INTO t VALUES ('w','x'),('x','w'),('y','z'),('z','y');

es gibt:

w  x
y  z

Mit LEAST und GREATEST stellt auch sicher, dass w x statt x w zurückgeführt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top