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
Kartesisches Produkt
Moderator: Moderatoren
Re: Kartesisches Produkt
Der Weg über WHERE auf dem kartesischen Produkt dauert viel zu lange. Du benötigst JOIN. Wie das im einzelnen geht findest du in jedem ordentlichen SQL-Lehrbuch. Vorsicht, zur Zeit gibt es bei JOIN noch Probleme mit der Entwurfsansicht, arbeite besser direkt in der SQL-Ansicht.
mfG
Regina
mfG
Regina