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.

Ist das richtig ?

Empfohlene Antworten

Veröffentlicht

Hi,

Ich würde gerne wissen ob der folgende SELECT richtig ist.

Ich habe eine Datenbank mit 3 Tabellen:

Saison: SaisonID, SaisonBeschreibung

Spieltag: SpieltagID, Spieltag, Heimmannschaft, Gegenmannschaft, SaisonID

Spiel: ID, SpielNr, Spieler1, Spieler2, Ergebnis1, Ergebnis2, Punkte, SpieltagID

So nun möchte ich gerne alles Selektieren wo die SaisonID am größten ist.

Das hab ich folgendermaßen realisiert: (in Java)

rs = st.executeQuery("SELECT SaisonBeschreibung, Spieltag," +

" Heimmannschaft, Gegenmannschaft," +

" SpielNr, Spieler1, Spieler2," +

" Ergebnis1, Ergebnis2, Punkte" +

" FROM Saison, Spieltag, Spiel" +

" WHERE Saison.SaisonID = (SELECT max(SaisonID) FROM Saison)" +

" AND Spieltag.SaisonID = Saison.SaisonID" +

" AND Spiel.SpieltagID = Spieltag.SpieltagID;");

Ich glaube allerdings das da ein Fehler drinne ist, hab so die Voranhnung das bei den AND - Befehlen was falsch ist bin mir aber nicht sicher !

Er selektiert net richtig, aber am Java-Code ist alles in Ordnung, also müsste der Select falsch sein.

Würde mich freuen wenn ihr mir helfen könntet.

Nein leider gibt er mir nicht die richtige Ausgabe, das ist das Problem. Kann mir aber nicht weiterhlefen.

hi,

wenn deine ergebnismenge zu groß ist würde ich sagen im subselect die saison-tabelle mit einem alias versehen (wenns das dbms unterstützt), damit keine verwechslungen in den spalten auftreten

WHERE Saison.SaisonID = (SELECT max(s.SaisonID) FROM Saison as s)

ansonsten mal überprüfen, ob zu der letzten saison werte in spieltag existieren und ob die spalten, über die du verknüpfst (z.b. spieltagid) auch vom gleichen datentyp sind. näheres dazu könnte man sagen, wenn man das dbms wüsste :D

Gemäß deiner Definition gibt es kein Attribut Spieltag in deinem Relationenschema. (Das ist vermutlich nur ein Replikationsfehler, denn in jedem anderen Fall würdest du entsprechende Fehler erhalten.)

Ansonsten sollte diese Abfrage allerdings die gewünschten Daten zurückgeben, vorausgesetzt, du hast darauf geachtet, dass die Integrität der Daten durch entsprechende Schlüssel und Einschränkungen bereits in der DB sichergestellt wird...

Peregrins Idee, dem Subselect ein Alias zuzuweisen ist allerdings überflüssig.

Es dürfte funktionieren, vorausgesetzt, das DBMS unterstützt die Auflösung von Alias-Namen. (In diesem Fall würde ich dir aber eher dazu raten, das globale Select-Statement übersichtlicher zu machen, indem du dich nicht auf die Eindeutigkeitszuordnung, sondern auf die imperative Deklaration verlässt.) Da das Subselect-Statement unabhängig vom anfordernden Select-Statement ausgeführt wird, kann es nicht zu "Verwechslungen" kommen. Lediglich die Ergebnismenge des Subselect-Statements ist mit dem globalen Select-Statement verknüpft.

Original geschrieben von just_me

[...]Da das Subselect-Statement unabhängig vom anfordernden Select-Statement ausgeführt wird, kann es nicht zu "Verwechslungen" kommen. Lediglich die Ergebnismenge des Subselect-Statements ist mit dem globalen Select-Statement verknüpft.

ups, mein fehler... :floet: just_me hat natürlich recht.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

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.