Tabellenabfrage in sich selbst

empea

Neuer Benutzer
Beiträge
2
Ich möchte über die Spalte "Suche" alle Einträge finden, die über die Spalte "Verbindung" miteinander verbunden werden. Suche = "E" findet also die Verbindung(en) 2 und 4. Meine Abfrage (Suche = E) soll nun die Zeilen 4, 5,6, 10, 11, 12, 13 (siehe Tabelle).

Meine Idee war

SELECT * FROM tabelle AS T INNER JOIN tabelle AS TA T.nr = TA.verbindung WHERE t.suche = E

Leider führt diese Abfrage zu 0 Ergebnissen. Vielen Dank für eure Hilfe :)

upload_2019-10-17_10-22-51.png
 
Werbung:
Code:
andreas@[local]:5432/test# select * from empea ;
 nr | verb | suche
----+------+-------
  1 |    1 | a
  2 |    1 | b
  3 |    1 | c
  4 |    2 | d
  5 |    2 | e
  6 |    2 | f
  7 |    3 | g
  8 |    3 | h
  9 |    3 | i
 10 |    4 | e
 11 |    4 | a
 12 |    4 | b
 13 |    4 | c
(13 rows)

andreas@[local]:5432/test# with v as (select verb from empea where suche = 'e') select * from empea where verb in (select * from v);
 nr | verb | suche
----+------+-------
  4 |    2 | d
  5 |    2 | e
  6 |    2 | f
 10 |    4 | e
 11 |    4 | a
 12 |    4 | b
 13 |    4 | c
(7 rows)

andreas@[local]:5432/test#

als einer von vielen Wegen ...
 
Vielen Dank für die schnelle Antwort. PHPMyAdmin möchte mir leider keine Ausgabe liefern, da der Typ "WITH" nicht erkannt wird (und nach meiner Recherche nicht mehr unterstützt wird). Gibt es einen alternativen Befehl, der einfach an die Stelle gesetzt werden kann? Wenn nicht, bin ich für einen weiteren Weg sehr dankbar. LG
 
Wechsel zu PostgreSQL

PostgreSQL ist ebenfalls kostenlos zur verfügung gestellt, jedoch weitaus mächtiger ;)

Was mir bei meinem bisherigem Weg als Pro für PostgreSQL entgegenkam:

1.: Eigene Typen definieren
2.: Range Typen existieren
3.: Exclusion Constraints
4.: Recursive Abfragen (With Querys)

und natürlich bei weitem mehr.
PostgreSQL
damit ich dich auch direkt dorthin verlinke ;)

Habe quasi ALLES von SQL gelernt, was ich heute kann, in diesem Forum.
 
WITH ist kein Typ, sondern eine Abfragemöglichkeit, die MySQL noch nicht kann. Du kannst das umstellen in ein Subselect, aus WITH x AS (...) SELECT ... FROM X kannst Du auch sagen: SELECT ... FROM (hier das aus der ersten Klammer rein) AS x WHERE ...

Davon abgesehen: siehe die Antwort von unserem Kampfgummi ;-)
 
Werbung:
Zurück
Oben