Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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.

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.

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.

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

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

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

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?

OK alles klar - ich glaube ich habs gerafft :D.

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

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.