Zum Inhalt springen

SQL - Abfrage


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D.

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Monate später...

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 ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
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...