von Bubi Meier » Fr, 02.11.2007 21:05
Guten Abend, meine Damen und Herren,
ich meditiere zur Zeit über einen SQL Query, welcher ein paar verknüpfte Tabellen abfragt, also z.B.:
PRODUKTE <- RECHNUNG -> KUNDE
wobei zwischen PRODUKTE und RECHNUNG sogar eine n:m Beziehung vermittels einer weiteren Tabelle, sagen wir mal RECHNUNGSPRODUKTE, bestehen könnte. Also etwa:
PRODUKTE <- RECHNUNGSPRODUKTE -> RECHNUNG -> KUNDE
Eine Liste aller Rechnungen mit den interesanten Informationen könnte nun etwa durch
SELECT * FROM "Kunde" AS "a","Rechnung" as "b", "RECHNUNGSPRODUKTE" as "c", "Produkte" as "d"
WHERE "b"."REFKunde" = "a"."ID", "c"."RefRechnung" = "b"."ID", "c"."RefProdukt" = "d"."ID"
realisiert werden. Das habe ich ausprobiert und klappt auch so.
("*" würde man wahrscheinlich etwas spezifischer formulieren)
Nun frage ich mich allerdings, ob das auch so geschickt ist: Im ersten FROM statement wird je nach Beschaffenheit der Tabellen ein riesiges 'kartesisches Produkt' auf gebaut. Wird dies vom ooBase wirklich so groß aufgebaut, oder denke ich hier falsch? Erkennt ooBase im Vorfeld, dass dies kartesische Produkt durch die WHERE Bedingungen nicht nötig ist?
Wenn das ungeschickt sein sollte, wie gehts anders?
-bm
Guten Abend, meine Damen und Herren,
ich meditiere zur Zeit über einen SQL Query, welcher ein paar verknüpfte Tabellen abfragt, also z.B.:
PRODUKTE <- RECHNUNG -> KUNDE
wobei zwischen PRODUKTE und RECHNUNG sogar eine n:m Beziehung vermittels einer weiteren Tabelle, sagen wir mal RECHNUNGSPRODUKTE, bestehen könnte. Also etwa:
PRODUKTE <- RECHNUNGSPRODUKTE -> RECHNUNG -> KUNDE
Eine Liste aller Rechnungen mit den interesanten Informationen könnte nun etwa durch
SELECT * FROM "Kunde" AS "a","Rechnung" as "b", "RECHNUNGSPRODUKTE" as "c", "Produkte" as "d"
WHERE "b"."REFKunde" = "a"."ID", "c"."RefRechnung" = "b"."ID", "c"."RefProdukt" = "d"."ID"
realisiert werden. Das habe ich ausprobiert und klappt auch so.
("*" würde man wahrscheinlich etwas spezifischer formulieren)
Nun frage ich mich allerdings, ob das auch so geschickt ist: Im ersten FROM statement wird je nach Beschaffenheit der Tabellen ein riesiges 'kartesisches Produkt' auf gebaut. Wird dies vom ooBase wirklich so groß aufgebaut, oder denke ich hier falsch? Erkennt ooBase im Vorfeld, dass dies kartesische Produkt durch die WHERE Bedingungen nicht nötig ist?
Wenn das ungeschickt sein sollte, wie gehts anders?
-bm