Daidalos Geschrieben 18. November 2002 Geschrieben 18. November 2002 Servus Zusammen, ich hab mir gerade die AP Sommer 2002 (GA2 - 6ter Handlungsschritt) nochmal angeschaut - da kommt folgende SQL Abfrage vor... Folgende Tabellen: Teile: Teilenummer Bezeichnung Lagerort Teile_Klassifizierung... Teile_Lieferer: Teilenummer Lieferernummer Artikelnummer_des_Lieferers Preis ... Lieferer: Lieferernummer Kundennummer_beim_Lief Firma Strasse ... Nun soll man folgende SQL-Anweisung schreiben: Sämtliche Lieferer die das Teil mit der Teilenumme 4711 liefern können - Ausgabe mit jeweils Teilenummer, Lieferernummer, Firma, Preis des jeweiligen Lieferers. Ich würde auf folgende Lösung kommen: SELECT Teile_Lieferer.Lieferer, Teile_Lieferer.Lieferernummer, Lieferer.Firma, Teile_Lieferer.Preis FROM Teile_Lieferer, Lieferer WHERE Teile_Lieferer.Teilenummer='4711'; Das ist die Lösung in der Musterlösung: SELECT Teile_Lieferer.Lieferer, Lieferer.Lieferernummer, Lieferer.Firma, Teile_Lieferer.Preis FROM Teile_Lieferer, Lieferer WHERE Teile_Lieferer.Teilenummer='4711' AND Teile_Lieferer.Lieferernummer=Lieferer.Lieferernummer; Kann mir jemad erkären wo ich evtl. einen Denkfehler oder so hab :confused:. Danke schon mal! Grüße Daidalos Zitieren
readonly Geschrieben 18. November 2002 Geschrieben 18. November 2002 Originally posted by Daidalos SELECT Teile_Lieferer.Lieferer, Teile_Lieferer.Lieferernummer, Lieferer.Firma, Teile_Lieferer.Preis FROM Teile_Lieferer, Lieferer WHERE Teile_Lieferer.Teilenummer='4711'; Das ist die Lösung in der Musterlösung: SELECT Teile_Lieferer.Lieferer, Lieferer.Lieferernummer, Lieferer.Firma, Teile_Lieferer.Preis FROM Teile_Lieferer, Lieferer WHERE Teile_Lieferer.Teilenummer='4711' AND Teile_Lieferer.Lieferernummer=Lieferer.Lieferernummer; Kann mir jemad erkären wo ich evtl. einen Denkfehler oder so hab :confused:. Du bildest mit Deiner Anweisung das karthesische Kreuzprodukt (Beispiel aus der Mathematik ist zum Beispiel RxR). Dies will man aber nicht bei dieser Abfrage haben, sondern man will ja die 1:n Beziehung zw. den Tabellen nutzen, daher Teile_Lieferer.Lieferernummer=Lieferer.Lieferernummer. Stichwort für Google wäre hier wohl "inner join" als Nachtlektüre. Darunter sollten sich eine Menge Infos finden lassen, besonders auf Uni-Seiten. viele grüße readonly Zitieren
Daidalos Geschrieben 18. November 2002 Autor Geschrieben 18. November 2002 Servus, aber die Liefernummern stehen doch eh schon miteinander in Verbindung - warum muss ich die dann noch "gleichsetzen" ? Außerdem könnte ich doch die "Teile_Lieferer.Lieferernummer" anstatt der "Lieferer.Lieferernummer" ausgeben oder liegt das am Primärschlüssel bei "Lieferer.Lieferernummer"? Ich glaub ich plan das nie :confused:. Sorry aber ich hab noch nicht sooo viel mit SQL gemacht . Grüße Daidalos. Zitieren
Daidalos Geschrieben 18. November 2002 Autor Geschrieben 18. November 2002 Originally posted by readonly ... Dies will man aber nicht bei dieser Abfrage haben, sondern man will ja die 1:n Beziehung zw. den Tabellen nutzen, daher Teile_Lieferer.Lieferernummer=Lieferer.Lieferernummer. .... viele grüße readonly Vergiss den vorherigen Post - der ist a bissal zu verwirrend geschrieben . Also wenn ich das recht verstehe muss ich erst die Beziehunge überpürfen und dann auf der 1er Seite den Primärschlüssel abfragen (hier: WHERE Teile_Lieferer.Teilenummer) und dann den Datensatz Teile_Lieferer.Lieferernummer dem Datensatz Lieferer.Lieferernummer gegenüberstellen!? :confused: Hab ich das richtig interpretiert ? Danke schon mal MfG Daidalos (heute a bissal verwirrt). Zitieren
Felicie Geschrieben 19. November 2002 Geschrieben 19. November 2002 Hallo, wie schon erwähnt kann man das auch mit einem Inner join machen: SELECT Teile_Lieferer.Teilenummer, Teile_Lieferer.Lieferernummer, Lieferer.Firma, Teile_Lieferer.Preis, Teile_Lieferer.Lieferer FROM Teile_Lieferer inner join Lieferer on teile_lieferer.lieferernummer = lieferer.lieferernummer WHERE Teile_Lieferer.Teilenummer='4711' Du musst also aus den jeweils zusammengehörenden Zeilen der Tabellen einen Rückgabedatensatz machen um auf alle INfos zugreifen zu können. Das Inner join ist dazu da um explizit zu sagen, über welches Feld die beiden Tabellen miteinander verknüpft sind. Da reicht es nicht, dass sie gleiuch heissen, denn das ist nicht der regelfall. Bei weiteren Verständnisproblemen, einfach einen Post oder ne PM. Zitieren
tulp99 Geschrieben 19. November 2002 Geschrieben 19. November 2002 ich hatte auch den selben fehler ich das AND Teile_Lieferer.Lieferernummer=Lieferer.Lieferernummer; auch weggelassen. Und obwohl ich die diskussion verfolge kapiere ich es trozdem nicht. muß wohl google benutzen Zitieren
P3AC3MAK3R Geschrieben 19. November 2002 Geschrieben 19. November 2002 Das AND Teile_Lieferer.Lieferernummer=Lieferer.Lieferernummer; sorgt einfach dafür, daß die Datensätze über den Schlüssel Lieferernummer verknüft werden. Läßt man das raus, werden einfach alle Datensätze der Lieferer-Tabelle mit den Datensätzen der Teile-Lieferer-Tabelle verknüpft, die die Artikelnummer 4711 enthalten (Kreuzprodukt). Zitieren
Daidalos Geschrieben 19. November 2002 Autor Geschrieben 19. November 2002 Originally posted by P3AC3MAK3R Das sorgt einfach dafür, daß die Datensätze über den Schlüssel Lieferernummer verknüft werden. Läßt man das raus, werden einfach alle Datensätze der Lieferer-Tabelle mit den Datensätzen der Teile-Lieferer-Tabelle verknüpft, die die Artikelnummer 4711 enthalten (Kreuzprodukt). Ok aber warum sind die nicht standardmäßig miteinaner verknüpft - muss man die immer so miteinander vernüpfen wenn man mehrere Tabellen hat ? Danke schon mal! Daidalos Zitieren
Darth_Zeus Geschrieben 19. November 2002 Geschrieben 19. November 2002 Originally posted by Daidalos Ok aber warum sind die nicht standardmäßig miteinaner verknüpft - muss man die immer so miteinander vernüpfen wenn man mehrere Tabellen hat ? Danke schon mal! Daidalos Muss man! Man verknüpft ja nicht standardmässig alles mögliche mit allem möglichen, man schreibt auch nicht alles in ein und dieselbe Tabelle. Und wie hier schon erwähnt: sorgt einfach dafür, daß die Datensätze über den Schlüssel Lieferernummer verknüft werden. Wo machst du denn in Ro deine Ausbildung? Zitieren
Daidalos Geschrieben 19. November 2002 Autor Geschrieben 19. November 2002 OK alles klar - ich glaube ich habs gerafft . Ich komm nur ausm Raum RO - Ausbildung mach in in München (Obersendling). Und Du ? Lernst Du in RO ? Wenn ja - Wo ? MfG Daidalos . PS: Bin ggf. bis nächste Woche nicht mehr Online - wartet daher nicht auf Antworten . Zitieren
Breathless Geschrieben 29. März 2003 Geschrieben 29. März 2003 Geht folgende Lösung auch ? SELECT TL.Teilenummer, TL.Liefernummer, TL.Preis, L.Firma FROM Teile_Lieferer TL, Lieferer L WHERE ((TL.Teilenummer = L.Teilenummer) AND TL.Teilenummer ="4711") Und von was ist das abhängig ob ich AND TL.Teilenummer="4711" benutzt ? Ich kann doch auch L.Teilenummer="4711" hernehmen ??!! Bitte aufklärung! PS: Servus Julian, ja wir sind nun auch soweit ^^ Zitieren
Der Kleine Geschrieben 29. März 2003 Geschrieben 29. März 2003 Originally posted by Daidalos Ok aber warum sind die nicht standardmäßig miteinaner verknüpft - muss man die immer so miteinander vernüpfen wenn man mehrere Tabellen hat ? Access - Probleme? Access kann man Verknüpfungen standardmässig einstellen. Im SQL sind diese Beziehungen untereinander aber erneut anzugeben. Originally posted by Breathless WHERE ((TL.Teilenummer = L.Teilenummer) AND TL.Teilenummer ="4711")Ordentlich ausgeschrieben ist das doch das Gleiche wie vorher, nur mit mehr Klammern. Zitieren
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.