Wiesel Geschrieben 2. Februar 2004 Teilen Geschrieben 2. Februar 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
beetFreeQ Geschrieben 2. Februar 2004 Teilen Geschrieben 2. Februar 2004 Wieso meinst du denn, daß da ein Fehler ist? Also ich hab keinen entdecken können... - bekommste denn nicht das Ergebnis, das du haben willst? Vielleicht haste ja nen Denkfehler... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Wiesel Geschrieben 2. Februar 2004 Autor Teilen Geschrieben 2. Februar 2004 Nein leider gibt er mir nicht die richtige Ausgabe, das ist das Problem. Kann mir aber nicht weiterhlefen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peregrin Geschrieben 2. Februar 2004 Teilen Geschrieben 2. Februar 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
just_me Geschrieben 3. Februar 2004 Teilen Geschrieben 3. Februar 2004 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Peregrin Geschrieben 3. Februar 2004 Teilen Geschrieben 3. Februar 2004 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. 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.