MYSQl-Abfrage: zwei Bedingungen auf unterschiedliche Zeilen anwenden und verknüpfen
-
Nach dem die Suche im Web kein brauchbares Ergebnis gebracht hat poste ich meine Frage einfach mal hier:
Ich habe eine Tabelle mit den Spalten var1 und var2. Hier besteht der erste Teil einer Abfrage darin, eine Position zu finden, an der var1 einen bestimmten Wert hat. So weit so simpel. Jetzt möchte ich aber gleichfalls wissen, ob der Wert von var2 an dieser Position noch mal an einer anderen Stelle als var1 vorkommt und dort var2 den gleichen Wert wie var1 hat (also ob es die gleiche Wertekombination noch mal in umgekehrter Reihenfolge gibt) - erst wenn dem nicht so ist möchte ich var1 als Ergebnis geliefert bekommen.
Um das mal zu veranschaulichen:
var1 var2 1 2 2 1 3 2
Wenn var1 = 1 ist, so ist für den ersten Teil der Abfrage var2 = 2. Da aber gleichzeitig eine Spalte var1=2 und var2=1 existiert, soll die Abfragebedingung hier eben nicht erfüllt sein.
Anders für die Abfrage des Wertes für var1=3: var2 ist hier 2, es existiert aber keine andere Zeile in der var1=2 und var2=3 ist, also ist die Bedinung erfüllt und ich möchte den Wert 2 zurückgeliefert bekommen.
Meine Frage nun: geht sowas in einem einzigen SQL-Statement?
Thx
-
Wenn jedes Var1 eindeutig ist, könnte das hier funktionieren.
SELECT var2 FROM tab a WHERE var1 = 1 AND not exists ( SELECT 1 FROM tab b INNER JOIN a ON a.var1 = b.var1 and a.var2 = b.var2 WHERE var2 = 1 AND var1 = (SELECT var2 FROM tab a WHERE var1 = 1 ))
-
var1 kann mehrfach vorkommen, allerdings mit immer anderen var2-Partnern. Gleiche var1-var2-Kombinationen sind ausgeschlossen.
-
Glaube nicht, dass Du das mit einem Statement hinkriegst.
-
Mit einem Self-join geht das
select t1.var1, t1.var2 from tab t1 join tab t2 on t1.var1 = t2.var2 and t1.var2 = t2.var1
Ungetestet und ohne Garantie.
Tntnet