Wenn in jedem „Paar“, um die Reihenfolge der Elemente zu bewahren ist nicht wichtig, finden Sie in der Antwort von eggyal. Diese Abfrage gibt eine Ergebnismenge zurück, die sich geringfügig von der von Ihnen angegebenen unterscheidet. Sie gibt das Paar 102-987
anstelle von 987-102
zurück. Es entfernt auch alle "doppelten" Paare, die in der Tabelle erscheinen.
Wenn die Reihenfolge der Elemente in jedem Paar ist wichtig, und Sie möchten die "kleiner - größer" statt "größer - kleiner", wenn beide dieser "passenden" Paare vorhanden sind, die Sie können diese so etwas wie:
SELECT c.col1, c.col2
FROM mytable c
LEFT
JOIN mytable d ON d.col1 = c.col2 AND d.col2 = c.col1 AND d.col1 <> d.col2
WHERE (d.col1 IS NULL OR d.col1 > c.col1)
zu beseitigen alle doppelten Paaren und „matching“ Paare, fügen Sie eine GROUP BY-Klausel oder das Schlüsselwort distinct, zB
SELECT c.col1, c.col2
FROM mytable c
LEFT
JOIN mytable d ON d.col1 = c.col2 AND d.col2 = c.col1 AND d.col1 <> d.col2
WHERE (d.col1 IS NULL OR d.col1 > c.col1)
GROUP BY c.col1, c.col2
NOTES:
SQL Fiddle hier: http://sqlfiddle.com/#!2/1d9e7/1 und hier: http://sqlfiddle.com/#!2/1d9e7/2
Die Vergleichsoperatoren sind nicht null-Safe, können sie die Suchresultates nicht zurückkehren Sie wollen, wenn entweder col1 oder col2 enthält einen NULL-Wert. (Die Abfrage könnte geändert werden, um NULL-Werte für Spalte1 und/oder Spalte2 zu behandeln.) Wie beschrieben, würden beide Abfragen z. B. beide (1,NULL)
und (NULL,1)
zurückgeben, wenn diese "übereinstimmenden" "Paare" in der Tabelle sind. (Es läuft auf die Frage hinaus, ob NULL-Werte berücksichtigt werden sollen oder nicht.)
Beachten Sie auch, dass beide Abfragen Zeilen zurückgeben, in denen col1=col2
.
Beachten Sie, dass die erste Abfrage NICHT "doppelte" Zeilen eliminiert, die in der Tabelle vorhanden sind. Das heißt, wenn ein doppeltes "Paar", z. B. (202,101)
, in zwei verschiedenen Zeilen erscheint, werden beide zurückgegeben (es sei denn, die Abfrage gibt mindestens eine Zeile mit einem "übereinstimmenden" Paar zurück: (101,202)
.)
Es war nicht klar, welche Ergebnismenge in diesen Fällen zurückgegeben werden sollte, daher zeigt die erste Abfrage das Muster für die Beseitigung von NUR Zeilen (larger,smaller)
, wenn ein passendes Paar (smaller,larger)
im Resultset enthalten ist.
Die zweite Abfrage eliminiert ALLE Duplikate und "übereinstimmende" Paare.
Zeigen Sie uns Ihre Tabellenstruktur –
PERSON_ID int (10), QUESTION_ID int (10) TEXT_ANSWER Text, ich glaube zweite colomn ist nicht nötig, denn in dieser Frage, ich es in WHERE-Klausel verwenden –