Konkrete Frage SQL : 2 Tabellen -'Join' ?

Hallo!

Ich brauche die Hilfe eine SQL-Profis:wink: Und zwar zu folgenden SQL Statement:

Select P2.*
FROM Personal AS P1, Personal AS P2
WHERE P1.lft BETWEEN P2.lft AND P2.rgt
AND P1.emp = ‚007bond‘;

GrundsĂ€tzlich ist mir SQL schon klar:wink: Was ich daran jetzt aber ĂŒberhaupt nicth verstehe sind diese zwei AS P1 und AS P2 Deklarationen:
Wieso wird hier ein und die selbe Table zweifach referenziert?
Und insbesondere, was lÀuft dann da ab???

WHERE P1.lft BETWEEN P2.lft AND P2.rgt
da fehlt doch bei P2.lft und P2.rgt irgendwelche Werte ??? Wieso kann da ein Ergebnis rauskommen, das ist doch viel zu theoretisch weil ihr irgendwas referenziert wird wofĂŒr es garkeine Werte gibt.
Wies wird da ĂŒberhaupt eine zweite Kopie einer Tabelle angelegt
?
P1.emp = „007bond“ ist klar und auch sonst sind mir „einfach“ Joins klar, nur das oben verstehe ich leider nicht.

Wer kann mir dazu ein paar Tips / Schlagworte geben damit ich das nochmals genauer nachlesen und googlen kann. Wer Links dazu kennt wĂ€re natĂŒrlich super! (ich suche nicht eine allgemein SQL Referenz sondern was, was sich mit diesem „Problem der zwei Tabellen die da so komisch miteinander referenziert werden erklĂ€rt“.

Vielen Dank!!
Julian

Hallo!

Ich brauche die Hilfe eine SQL-Profis:wink: Und zwar zu folgenden
SQL Statement:

Select P2.*
FROM Personal AS P1, Personal AS P2
WHERE P1.lft BETWEEN P2.lft AND P2.rgt
AND P1.emp = ‚007bond‘;

GrundsÀtzlich ist mir SQL schon klar:wink: Was ich daran jetzt
aber ĂŒberhaupt nicth verstehe sind diese zwei AS P1 und AS P2
Deklarationen:
Wieso wird hier ein und die selbe Table zweifach referenziert?
Und insbesondere, was lÀuft dann da ab???

Das nennt man einen Auto-Join. Wenn Du Werte aus ein und derselben Tabelle - aber aus unterschiedlichen Zeilen - miteinander vergleichen willst. Das brauchst Du z.B. bei hierarchisch gegliederten Daten.

WHERE P1.lft BETWEEN P2.lft AND P2.rgt
da fehlt doch bei P2.lft und P2.rgt irgendwelche Werte ???
Wieso kann da ein Ergebnis rauskommen, das ist doch viel zu
theoretisch weil ihr irgendwas referenziert wird wofĂŒr es
garkeine Werte gibt.

Ist doch ganz einfach: matematisch wird das Kreuzprodukt aus allen Tabellen gebildet (was man natĂŒrlich technisch nicht realisieren kann) und die Spalten werden veglichen. Da Du alle möglichen Kombinationen hast, ist Dein Ergebnis vollstĂ€ndig.

Wies wird da ĂŒberhaupt eine zweite Kopie einer Tabelle
angelegt
?

nein. Aber es wird genauso wie auf zwei Tabellen Zugegriffen.

P1.emp = „007bond“ ist klar und auch sonst sind mir „einfach“
Joins klar, nur das oben verstehe ich leider nicht.

Den Sinn Deines Join verstehe ich allerdings auch nicht. Ein sprechendes Beispiel wĂ€re vermutlich nĂŒtzlicher gewesen, wenn Du damit SQL lernen willst.

Wer kann mir dazu ein paar Tips / Schlagworte geben damit ich
das nochmals genauer nachlesen und googlen kann. Wer Links
dazu kennt wĂ€re natĂŒrlich super! (ich suche nicht eine
allgemein SQL Referenz sondern was, was sich mit diesem
„Problem der zwei Tabellen die da so komisch miteinander
referenziert werden erklĂ€rt“.

Vielen Dank!!
Julian

Gruß

Peter

Danke :wink:
Hallo Peter,

vielen Dank fĂŒr deine Antwort. Die Stichworte haben mir schonmal sehr viel weitergeholfen, wobei ich aber leider feststellen musste, dass ich mich erst mal noch so richtig mit Relationenalgebra auseinandersetzen muss um das Grundproblem „richtig“ zu verstehen (NestedSets)

Danke fĂŒr Deine Hilfe.
Julian