Lions2011 Geschrieben 2. Juli 2007 Teilen Geschrieben 2. Juli 2007 Hallo zusammen, ich habe bei der folgenden Aufgabe ein Problem: Welche Auftragspositionen von welchen Kunden könnten im gleichen Ort (ort des Kunden gleich dem Lagerort des Produkts) ausgeliefert werden? Erzeugen Sie eine Liste, die nach Auftragsnummer sortiert, Auftragsnummer, Produktnummer, Produktbezeichnung, Lagerort, Kundennummer sowie Kundenname enthält. Folgende Tabellen stehen zur Verfügung: kunde: knr (primary key), firma, status, ort prod: pnr (pk), bez, preis lager: pnr (fk), ort (pnr und ort pk), menge auftr anr (pk), knr (fk), adat, ldat posit: anr (fk), pnr (fk) (anr und pnr zusammen pk), menge, vkp Ich habe diese Aufgabe schon mal hier reingestellt, allerdings war sie damals falsch, da ich sie nicht mit Joins gelöst habe. Meine neue Lösung ist: select posit.anr, posit.pnr, kunde.knr, kunde.firma, kunde.ort, prod.bez, lager.ort from prod join( posit join (kunde join lager on kunde.ort = lager.ort) on posit.pnr = lager.pnr) on prod.pnr = posit.pnr order by posit.anr Leider gibt diese jedoch nicht das gewünschte Ergebnis, sondern folgendes: ANR PNR KNR FIRMA ORT BEZ ORT ---------------------- ---------------------- ---------------------- ---------- ---------- ---------- ---------- 100 10 5 Enrico Berlin Ski Berlin 101 30 5 Enrico Berlin Drachen Berlin 101 40 5 Enrico Berlin Segelboot Berlin 101 50 5 Enrico Berlin Flossen Berlin 101 10 5 Enrico Berlin Ski Berlin 101 20 5 Enrico Berlin Tretboot Berlin 101 20 1 Adelmeyer München Tretboot München 101 30 1 Adelmeyer München Drachen München 101 40 1 Adelmeyer München Segelboot München 101 50 1 Adelmeyer München Flossen München 102 30 1 Adelmeyer München Drachen München 102 50 1 Adelmeyer München Flossen München 102 50 5 Enrico Berlin Flossen Berlin 102 30 5 Enrico Berlin Drachen Berlin 103 20 1 Adelmeyer München Tretboot München 103 40 5 Enrico Berlin Segelboot Berlin 103 20 5 Enrico Berlin Tretboot Berlin 103 40 1 Adelmeyer München Segelboot München 104 50 5 Enrico Berlin Flossen Berlin 104 50 1 Adelmeyer München Flossen München 105 10 5 Enrico Berlin Ski Berlin 105 50 1 Adelmeyer München Flossen München 105 50 5 Enrico Berlin Flossen Berlin 106 30 5 Enrico Berlin Drachen Berlin 106 40 5 Enrico Berlin Segelboot Berlin 106 50 5 Enrico Berlin Flossen Berlin 106 30 1 Adelmeyer München Drachen München 106 50 1 Adelmeyer München Flossen München 106 40 1 Adelmeyer München Segelboot München 29 rows selected Bei ANR 101 beispielsweise dürfte jedoch nur der Kunde Enrico auftauchen, nicht jedoch Kunde Adelmeyer. Danke schon mal im Voraus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HJST1979 Geschrieben 3. Juli 2007 Teilen Geschrieben 3. Juli 2007 Hallo Probiere es mal hiermit, ich konnte es leider gerade nicht testen, da ich keine DB da habe, aber es sollte funktionieren. Kann natürlich auch ein Fehler drin sein. Übrigens einen OuterJoin kannste auch hiermit erreichen posit.anr = auftr.anr(+), geht aber glaub nur bei SQLServer oder Oracle Select posit.anr, prod.pnr, prod.bez, lager.ort, kunde.knr, kunde.firma from posit, auftr, prod, lager, kunde where posit.anr = auftr.anr AND auftr.knr = kunde.knr AND posit.pnr = prod.pnr AND prod.pnr = lager.pnr AND lager.ort = kunde.ort Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ntl Geschrieben 3. Juli 2007 Teilen Geschrieben 3. Juli 2007 Darf man Joins so eineinander verschachteln? Wo ich mir vorstellen könnt, dass es noch (neben dem, was der Kollege über mir schon gesagt hat) funktioniert, wäre: SELECT posit.anr, posit.pnr, kunde.knr, kunde.firma, kunde.ort, prod.bez, lager.ort FROM lager JOIN prod ON lager.pnr = prod.pnr JOIN posit ON lager.pnr = posit.pnr JOIN kunde ON lager.ort = kunde.ort ORDER BY posit.pnr; Wäre nett, wenn du das mal ausprobieren würdest! Ist nämlich dann auch eine gute Übung für mich (bin in dem Bereich ja auch nicht so stark :floet: ) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.