Effizienter SQL-Query
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
anmerkung
ansatz
anweisung
aufruf
code
effizienz
element
erlaubt code
fehler
kontrolle
null
problem
relation
suche
tabelle
union
weiteren tabellen
-
Hallo!
Folgendes Datenbankenmodel (DBMS: MySQL)
TableA <-> T2T <-> TableB TableC <-> T2T <-> TableD,
also ManyToMany-Relations zwischen allen Tabellen A,B,C,D über die T2T-Tabelle. (Die PKs der Tabellen A, B, C und D sind "über alle Tabellen" unique.) Wobei T2T die Eingräge ID und ID1 hat, und so die Tabellen related.
Ich bin jetzt auf der Suche nach einem effektiven SQL-Query der folgendes tut:
Alle Element aus TableA Joinen mit:
allen Elementen aus B, mit
allen Elementen aus C und D.
Also folgende Tupel sind erlaubt:
TableA TableB TableC TableD x NULL NULL NULL x x NULL NULL x NULL x x x x x x.
Mein etwas unglücklicher Ansatz in einem Query:
SELECT a.ID, b.ID, c.ID, d.ID FROM TableA a -- der relationen aufruf LEFT JOIN T2T t2t ON (T2T.ID1 = a.ID OR T2T.ID = a.ID) -- a -> t2t -> b LEFT JOIN TableB b ON (b.ID = t2t.ID OR b.ID = t2t.ID1) -- a -> t2t -> c -> u2u -> d LEFT JOIN TableC c ON (t2t.ID = c.ID OR t2t.ID1 = c.ID) INNER JOIN T2T u2u ON (u2u.ID = c.ID OR u2u.ID1 = c.ID) INNER JOIN TableD d ON (u2u.ID = d.ID OR u2u.ID1 = d.ID)
Anmerkung T2T hat die Einträge ID und ID1, da ich mir momentan nicht sicher bin, wie die Relationen gemappt werden, müssen momentan die teuren OR-Anweisungen herhalten. Sind die fest, ist mir klar, dass die Effizienz enorm steigt. (Ich hoffe ich hab beim Ändern der Namen keine Fehler eingebaut).
Das Problem hier ist, dass T2T TabelleA mit weiteren Tabellen mapped, die zwei LEFT JOINS bewirken also, dass unnötige Einträge gefetched werden.
Optimal wäre doch eine Kontrolle, dass mindestens TableB oder TableC einträge haben. Eine weitere möglichkeit wären ja 2 Abfragen (UNION) mit INNER JOIN für TableB und TableC, da werden die anderen Relationen rausgefilter.Gibt es einen effizienten Weg das in einem SQL-Query hinzubekommen? Und vllt. noch zusätzlich einen "schönen"? ;)
Grüße,
sl1nk
Beitrag zuletzt geändert: 12.9.2015 19:54:30 von sl1nk -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage