Paul Brunner: effektive MYSQL Abfrage von 3 (n) verschachtelten Tabellen

Beitrag lesen

Hallo Fabian,

Meine Datenbank besteht aus drei Tabellen.

Tabelle_A      Tabelle_B       Tabelle_C
-stellen_id    -stellen_id     -ordner_id
-text1         -ordner_id      -unternehmen_id

Ich würde gern alle Spalten der Tabelle A ausgeben, wenn in Tabelle_C $ordner_id = ordner_id AND $unternehmen_id = unternehmen_id

und verschachtelten WHERE Bedingungen:
$sql = "SELECT text1, text2 FROM Tabelle_A
WHERE (
Tabelle_C.unternehmen_id ='$unternehmen_id'
AND Tabelle_C.ordner_id ='$ordner_id'
AND Tabelle_B.ordner_id = Tabelle_C.ordner_id
AND Tabelle_A.stellen_id = Tabelle_B.stellen_id)";

Ob deine JOIN-Klausel korrekt verschachtelt ist kann ich leider nicht sehen, aber deine WHERE-Klausel enthält zuviele Bedingungen. Die letzten beiden Bedingungen sind durch die JOIN-Klausel bereits erfüllt.

So sollte es gehen:

SELECT Tabelle_A.*
FROM Tabelle_C INNER JOIN (Tabelle_A INNER JOIN Tabelle_B ON Tabelle_A.stellen_id = Tabelle_B.stellen_id) ON Tabelle_C.ordner_id = Tabelle_B.ordner_id
WHERE (((Tabelle_B.unternehmen_id)='$unternehmen_id') AND ((Tabelle_C.ordner_id)='$ordner_id'));

Achte auf die korrekte Verschachtelung der JOINS in den Klammern von innen nach außen (Tabellen von rechts nach links).

Noch eine Tip: Der Übersichtlichkeit wegen solltest du die verknüpften Felder zweier Tabellen nicht gleich benennen. Also nicht "tabellen_b.ordner_id -> tabellen_c.ordner_id" sondern besser "tabellen_b.ordner_id -> tabellen_c.ordner_rel" damit sind die Felder auch unterscheidber ohne Tabellenangabe und die Richtung der Beziehung wird klar.

Gruß
Paul