Duplikate von Wertepaaren filtern

etnobommel1989

Benutzer
Beiträge
6
Hallo,
ich hoffe ich bin hier richtig. Ich hab ma ne Frage, wahrscheinlich ist es für manche recht einfach aber ich steh einfach aufm Schlauch.
Und zwar

Tabellenbeispiel

Spalte 1 Spalte 2
1 2
2 1 -> herausfiltern (selber Wert wie in Zeile 1)
2 3
3 1
1 3 -> herausfiltern (selber Wert wie in Zeile 4)
3 2 -> herausfiltern (selber Wert wie in Zeile 3)

also am Ende soll nur noch dies übrig bleiben:
Spalte 1 Spalte 2
1 2
2 3
3 1

Es wäre wunderbar wenn mir jm. die SQL Anfrage dazu erklären könnte. Mit distinct funzt es ja nicht da die Zeilen verglichen werden ob sie identisch sind.

Danke schon mal im Voraus
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.423
Hallo,
ich hoffe ich bin hier richtig. Ich hab ma ne Frage, wahrscheinlich ist es für manche recht einfach aber ich steh einfach aufm Schlauch.
Und zwar

Tabellenbeispiel

Spalte 1 Spalte 2
1 2
2 1 -> herausfiltern (selber Wert wie in Zeile 1)
2 3
3 1
1 3 -> herausfiltern (selber Wert wie in Zeile 4)
3 2 -> herausfiltern (selber Wert wie in Zeile 3)

also am Ende soll nur noch dies übrig bleiben:
Spalte 1 Spalte 2
1 2
2 3
3 1

Es wäre wunderbar wenn mir jm. die SQL Anfrage dazu erklären könnte. Mit distinct funzt es ja nicht da die Zeilen verglichen werden ob sie identisch sind.

Danke schon mal im Voraus


Du hast da in Spalte 1 mal einen größeren und mal einen kleineren Wert stehen, im Vergleich zur Spalte 2. Das wird schwer, zumindest solange ich die Regel dahinter nicht erkennt. Davon abgesehen:

Code:
privat=*# select * from etno ;
 a | b
---+---
 1 | 2
 2 | 1
 2 | 3
 3 | 1
 1 | 3
 3 | 2
(6 rows)

Time: 0,168 ms
privat=*# select distinct least(a,b), greatest(a,b) from etno ;
 least | greatest
-------+----------
  1 |  3
  1 |  2
  2 |  3
(3 rows)

Time: 0,214 ms
privat=*# select distinct greatest(a,b), least(a,b) from etno ;
 greatest | least
----------+-------
  3 |  1
  2 |  1
  3 |  2
(3 rows)

Andreas, mit PostgreSQL gemacht, Oraggle kann das sicher genauso.
 

ukulele

Datenbank-Guru
Beiträge
4.582
Ich glaube gemeint ist eher sowas hier:

Code:
SELECT    DISTINCT t1.a,t1.b
FROM    tabelle t1
WHERE    NOT EXISTS (    SELECT    1
                        FROM    tabelle t2
                        WHERE    t2.a = t1.b
                        AND        t2.b = t1.a )
 

etnobommel1989

Benutzer
Beiträge
6
Hey vielen Dank aber ich meinte das eher so,
Also ich habe eine Abfrage erstellt:

Code:
SELECT t1.name,t2.name
FROM tabelle t1, tabelle t2
WHERE t1.vorgesetzter_id =  t2.vorgesetzter_id
AND t1.mitarbeiter_id  !=  t2.mitarbeiter_id;

Somit bekomme ich alle möglichen Kombinationen von Mitarbeitern die den gleichen Vorgesetzten, haben bis auf die Kombination eines Mitarbeiter mit sich selbst.

Meine Frage ist nun wie kann ich diese Abfrage weiter basteln damit keine symmetrischen Paare ausgegeben werden,d.h wenn (A1,B1) ausgegeben wird soll nicht noch das zugehörige(B1,A1) ausgegeben werden. Ich hoffe ich habe es jetzt verständlich erklärt.
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.582
Meine eigentlich auch. Wenn man weitere Bedingungen hat (wie in dem Beispiel oben sollte man vieleicht der übersicht halber erst eine Sicht erstellen. Geht aber auch in einem Code...
 
Oben