Frage

Lassen Sie uns sagen, ich habe die folgenden vier Tabellen (Beispiele willen). Eigentümer, Trucks, Boxen, Äpfel

Ein Eigentümer viele Lastwagen haben kann, kann ein LKW viele Boxen haben und eine Schachtel viele Äpfel haben.

Eigentümer haben eine ID. Trucks hat eine ID und OWNER_ID. Boxen haben eine ID und truck_id. Äpfel haben eine ID und box_id.

Lassen Sie uns sagen, ich will von einem Eigentümer alle Äpfel „Besitz“ bekommen mit id = 34. Also habe ich alle, die Äpfel zu bekommen, die in den Kästen, die in Lastwagen sind, dass Eigentümer 34 besitzt.

Es gibt eine „Hierarchie“, wenn Sie werden von 4 Tabellen, dass jeder nur Bezug auf seine direkt „Eltern“ hat. Wie kann ich schnell Filterboxen während die Bedingungen für die anderen 3 Tabellen erfüllt?

Ich hoffe, dass Sinn gemacht etwas.

Danke.

War es hilfreich?

Lösung

select a.* 
from Trucks t
inner join Boxes b on t.id = b.truck_id
inner join Apples a on b.id = a.box_id
where t.owner_id = 34

Andere Tipps

Sie beginnen gerade an der „Spitze“ (Besitzer) und halten, bis Sie Beitritt bekommen, wo Sie wollen:

SELECT a.*
FROM Owners o
INNER JOIN Trucks t ON t.owner_id = o.id
INNER JOIN Boxes b on b.truck_id = t.id
INNER JOIN Apples a on a.box_id = b.id
WHERE o.id = ?

Wenn Abfragen wie die erforderlich sind, häufig und Sie arbeiten mit sehr großen Datenmengen, manchmal ist es sinnvoll, auch die Daten ein wenig denormalize. Zum Beispiel durch die owner_id auf die Äpfel Tabelle hinzugefügt wird. Es macht das Einfügen / die Daten ein bisschen schwieriger zu aktualisieren, aber kann Abfragen erleichtern.

    SELECT a.*
      FROM Apples a
INNER JOIN Boxes b ON b.id = a.box_id
INNER JOIN Trucks t ON t.id = b.truck_id
INNER JOIN Owners o ON o.id = t.owner_id
     WHERE o.id = 34

Sie können dies etwas vereinfachen, indem die an den Eigentümer kommen lassen und nur die Auswahl, wo t.owner_id 34 = wenn Sie keine Informationen über den Besitzer brauchen später.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top