• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SQL Code richtig?

freakXHTML

Mitglied
Hallo zusammen,

ich habe gerade keine Möglichkeit, den Code zu testen, doch möchte ich wissen, ob er stimmt. Ich habe folgende Tabellen im relationalen Datenbankmodell:

Spiel(SpielID, Datum, Zeit, Ort, Land, Punkte, Tore, SchiriID)
Schiri(SchiriID, Name, Nationalität)
Gegner(Land, Land1)

Die Frage ist, ob ein Schiedsrichter ein Spiel geleitet hat, das aus demselben Land wie er selbst kommt. Meine Abrage lautet:

Code:
SELECT Name FROM Schiri, Spiel, Gegner WHERE Schiri.SchiriID = Spiel.SpielID AND Nationalität = (SELECT Land FROM Spiel WHERE Spiel.Land = Gegner.Land)

Stimmt die Syntax?

Vielen Dank
lg, freakXHTML
 
Zuletzt bearbeitet:
Sicher nicht, das dürfte ein bisschen komplexer sein. Aber was heißt "das aus dem selben Land kommt"? Meinst du wo das Spiel stattgefunden hat?

Dann würde ich eher sowas tippen:
Code:
SELECT Name FROM Schiri LEFT JOIN Spiel ON shiri.SchiriID = spiel.SchiriID AND shiri.land = spiel.land
 
Ich suche den Schiri, der eine Mannschaft, die aus dem Land kommt, dessen Nationalität er hat. Beispie: Ein deutscher Schiedsrichter leitet ein Spiel, bei dem Deutschland spielt.

Warum sollte meine Version nicht richtig sein? Bei dir gibt es Nämlich ein Problem: Du hast die Gegner Tabelle nicht beachtet. Das Land kann nämlich auch Land1 sein. Außerdem finde ich meine Variante sogar komplexer als deine. Du benutzt einen einfachen LEFT Join. Ich habe einen natural Join und eine geschachtelte SQL Anfrage. Bist Du dir sicher, dass meine Anfrage nicht stimmt? Wenn ja, warum?

Vielen Dank
lg, freakXHTML
 
Deshalb sagte ich das. Die Frage war nicht klar. Denn es wird nicht ersichtlich, wie man das Land der teilnehmenden Teams ermitteln kann. Im Spiel müssen noch IDs zu den Teams rein und dann wird die Abfrage böse.
 
Zuletzt bearbeitet von einem Moderator:
Ich würde es so probieren:

Code:
SELECT
        Schiri.Name
FROM
        Schiri
INNER JOIN
        Spiel
    ON
        Schiri.SchiriId = Spiel.SchiriID
INNER JOIN
        Gegner
    ON
        Spiel.Land = Gegner.Land
WHERE
        Schiri.Nationalität = Gegner.Land
    OR
        Schiri.Nationalität = Gegner.Land1

Die Gegner-Tabelle wird so aber nicht hinhauen. Es sei denn, jedes Land kann nur ein Spiel machen. Füge die Daten besser mit in die Spiel-Tabelle ein. HeimLandId und GastLandId oder so. Dann noch als zusätzliche Tabelle:

Land : id, name

Schiri.Nationalität kann dann ebenfalls auf einen Eintrag in dieser Tabelle zeigen.
 
Zurück
Oben