Wie gegenüberliegenden Reihen von SQL-Tabelle entfernen
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).
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