[MySQL] Join Abfragen optimieren(?)

unique24

Grünschnabel
Hallo

Ich habe ein Vielzahl von Tabellen. Anbei ein kleiner Ausschnitt.
Ich möchte nun die ersten Views erstellen und suche den passenden SELECT Befehl.

PHP:
Select objli.objli_name, loc.loc_Language, rtl.rmtli_Name
from object_list objli

left JOIN object_preferred_room_type oprt 
ON objli.obj_Id_FK = oprt.obj_Id_FK 

left JOIN room_type_list rtl
ON oprt.rmt_Id_FK = rtl.rmt_Id_FK

left JOIN locale_short loc ON objli.loc_Id_FK = loc.loc_Id 
AND rtl.loc_Id_FK = loc.loc_Id

Where loc.loc_Id like "de"

mySQL.JPG

Zur Info:
Object_list: Enthält die Liste der Objekte. Kann Mehrsprachig sein. Die Tabelle "locale_short" hat "de" und "en" als Bsp für Deutsch und Englisch.
Ein Objekt kann mehrer bevorzugte Räume haben, die wiederum als Bezeichnung in "room_type_list" die locale für jeden Namen haben.

Wenn ich die Tabelle Testweise fülle, bekomme ich oben die passende Ausgabe.

zu JOIN meine Verständnis Fragen:
a) LEFT JOINS geben immer nur die Daten zurück, die auch in der Parent vorhanden sind
b) RIGHT JOINS geben immer ALLE Daten der Child Tabelle zurück und die passenden Parent Einträge
c) Wenn ich 30 dieser Mehrsprachigen Tabellen hätte, kann ich alle 30ig in die
PHP:
left JOIN locale_short loc ON
einsetzen.
Damit erhalte gleich sprachigen Bezeichnungen.

Kann ich aber auch die Sprache mit einem Befehl auf "de" setzen?
Also sobald eine Tabelle "loc_Id_FK" hat, soll diese auf "WHERE loc_Id_FK Like "de"" hören.

Ist die JOIN Abfrage noch zu optimieren? Man kann Joins ja auch staffeln, aber das ich noch zu komplex für mich und weiß auch nicht ob es nötig ist.

Danke!

Fohnbit
 
joins: http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

x left join y on .... -> alles von x und da wo's passt auch y, ansonsten null (x ist der 'driver')
x right join y on .... -> alles von y und da wo's passt auch x, ansonsten null (y ist der 'driver')
daher -> x left join y on = y right join x on

item: warum joinst du object_preferred_room_type? davon wird nichts verwendet so wie ich das sehe und es ist auch nicht nötig wegen den fks/pks...

genau, mit Where loc.loc_Id like "de" hast du dann nur de. aber ich würde = verwenden und nicht like
 
Zurück