Zum Inhalt springen

SQL Übung, dringend Hilfe benötigt


Lions2011

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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: )

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...