Lions2011 Geschrieben 24. Juni 2007 Teilen Geschrieben 24. Juni 2007 Hallo zusammen, ich habe eine Daba mit folgenden Tabellen erstellt mw_kunde: knr (primary key), firma, status, ort mw_prod: pnr (pk), bez, preis mw_lager: pnr (fk), ort (pnr und ort pk), menge mw_auftr anr (pk), knr (fk), adat, ldat mw_posit: anr (fk), pnr (fk) (anr und pnr zusammen pk), menge, vkp Hierzu habe ich ein paar Fragen: 1. Folgende Aufgabe soll mit einem Join gelöst werden: 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 ANR sortiert, ANR, PNR, BEZ, Lagerort, KNR sowie firma enthält. Ich habe die Aufgabe wie folgt gelöst, und möchte gerne wissen, ob die Aufgabe so richtig gelöst ist: SELECT mw_auftr.anr, mw_prod.pnr, mw_prod.bez, mw_lager.ort, mw_kunde.knr, mw_kunde.firma FROM mw_prod, mw_lager, mw_auftr, mw_kunde, mw_posit WHERE mw_kunde.ORT = mw_lager.ORT AND mw_auftr.ANR = mw_posit.ANR AND mw_kunde.KNR = mw_auftr.KNR AND mw_prod.PNR = mw_lager.PNR AND mw_prod.PNR = mw_posit.PNR ORDER BY mw_auftr.ANR; 2. Erzeugen Sie eine Liste aller Kunden, die denselben Statuswert haben wie der Kunde 'Danninger'. (Statuswert von Danninger = 30). Meine Lösung: SELECT * FROM mw_kunde WHERE mw_kunde.STATUS = 30; Ist das so richtig bzw. welche Lösung gibt es noch, es soll hier nämlich zwei Lösungsmöglichkeiten geben. Bei den folgenden Aufgaben bin ich nicht auf die Lösung gekommen. Es wäre nett, wenn ihr mir dabei helfen könntet. 3. Eine Statuserhöhung um 5 soll bei all jenen Kunden vorgenommen werden, deren Auftragssumme über 10.000 Euro liegt. 4. Es sind alle Kunden aus der Kundentabelle zu löschen, von denen derzeit kein Auftrag vorliegt. 5. VIEW Erzeugen Sie ein VIEW auf die Relation Kunde, die nur Großkunden, also Kunden mit einem Statuswert größer als 25, zeigt. 6. Trigger Schreiben Sie für das Relationenschema mw_Posit einen Trigger, der folgende Bedingung garantiert: Neu aufgenommene Auftragspositionen sind stets durch den eigenen (gesamten) Lagerbestand bzw. einer zusätzlich genügend großen Neubestellung beim eigenen Zulieferer zur Sicherstellung der später anstehenden Auslieferung gedeckt. Vorarbeitung: Sie erzeugen zunächst ein neues Relationenscheme Disposition (kurz: Dispo) mit folgenden Attributen: PNR, Lagerbestand (Menge), Neubestellung (BES), Reserviert (RES). Alle Attribute sind vom Typ Number. Das bestehende relationenschema mw_prod ist um das Attribut Bezugsmenge (BEZM), ebenfalls vom Typ Number, zu erweitern. Durchführung Für jede neue Auftragsposition ist ein EIntrag in die Tabelle DISPO einzufügen. In das Attribut RES ist der Wert der bestellten Menge einzufügen, wenn der Lagerbestand größer ist als die bestellte Menge. In das Attribut BES ist der Wert der Bezugsmenge des Produktes bzw. ein vielfaches einzufügen, wenn der Lagerbestand alleine nicht ausreicht, um die bestellte Menge abzudecken. Für ein Produkt bereits vorhandene Einträge in der Tabelle DISPO bleiben bei der Berechnung unberücksichtigt. Beachten Sie, dass sie zur Lösung der Aufgabe die bisher verwendeten Relationen soweit als möglich mit einbeziehen. Konkrete Tupelausprägungen für das Durchspielen des Szenarios geben Sie sich - soweit nicht schon geschehen - selbst vor! Vielen dank schon mal im Voraus Martin Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
VinciWizard Geschrieben 24. Juni 2007 Teilen Geschrieben 24. Juni 2007 Gut, dann will ich mal versuchen, zu antworten. 1. sieht gut aus 2. ich denke, du solltest den wert (30) im SQL ermitteln. Das geht dann mit zwei Möglichkeiten eines Subselects 3. ungefähr so: Update mw_kunde SET Status = Status + 5 where knr IN (select knr from mw_auftr, (weitere Tabellen) where (Join zwischen tabellen) group by knr having sum(menge*vkp) > 10000) 4. (a) DELETE from mw_kunde where not exists (select * from mw_auftr where mw_auftr.knr = mw_kunde.knr) ( DELETE from mw_kunde where knr not IN (select KNR from mw_auftr) 5. CREATE View grosskunden (knr, firma, status, ort) AS select knr, firma, status, ort from mw_kunde where status > 25 6. Trigger sind DB-spezifisch. Wenn DB2, dann kann ich Dir was schreiben. Bei Oracle oder mySql muss ich passen Gruß Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Lions2011 Geschrieben 24. Juni 2007 Autor Teilen Geschrieben 24. Juni 2007 Gut, dann will ich mal versuchen, zu antworten. 6. Trigger sind DB-spezifisch. Wenn DB2, dann kann ich Dir was schreiben. Bei Oracle oder mySql muss ich passen Ist bei Oracle. Trotzdem Danke für die restlichen Infos. Weitere Hilfen sind gerne weiter willkommen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 24. Juni 2007 Teilen Geschrieben 24. Juni 2007 Dann stell doch bitte mal konkrete Fragen. Denn deine Hausaufgaben sollst du ja schließlich machen und nicht irgendwer aus dem Forum. Denn so lernst du nichts und stehst bei einer ähnlichen Aufgabe wieder wie der „Ochs vorm Berg“. Nimm deine Schulungsunterlagen zur Hand und versuche dich selbst an einer Lösung die kannste dann posten oder wenn du auf bestimmte Fragen beim Lösen stößt kann dir auch geholfen werden aber so mal Aufgaben hier abzuladen und zu hoffen das macht schon wer wird wohl nichts werden. 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.