2 Fremdschlüssel auf einen Primärschlüssel

Benzbob

Mitglied
Hallo Tutorials-Gemeinde,

zunächstmal, ich beherrsche die SQL-Grundlagen aber bin wahrlich kein Experte.

Ich weiß auch nicht ganz genau ob ich mit dem Betreff den Nagel auf den Kopf getroffen hab, aber ich erklär mal mein Problem bzw. mein Anliegen.

Ich schreibe an einer kleinem Plattform zum verwalten von Fußballspielen, also einer kleineren Liga.
Dazu habe ich u.A. zwei Tabellen, zum einen 'spiele' und 'teams'.
Soweit so gut. Jetzt hab ich in 'teams' die spalten:

-team_id <- primary
-name
-tore
-gegentore
-etc

und in 'spiele' die spalten:

-spiel_id <- primary
-home_id <- fremdschlüssel auf team_id
-gast_id <- fremdschlüssel auf team_id
-etc

Sollte hoffentlich klar sein, hab ich auf denke ich mal richtig implementiert. Die Frage die ich hab ist:

Wie kann ich mir, mit EINER SELECT-Anweisung, ein Spiel ausgeben lassen, wo mir die home_id bzw die gast_id direkt durch den entsprechenden Namen, welcher ja in der Tabelle 'teams', ausgegeben wird.

Vielen Dank schonmal für die Hilfe,
Beste Grüße
 
Einfach 2 mal joinen..

SQL:
SELECT
  spiel_id,
  gast.name AS gast_name,
  home.name AS home_name
FROM
  spiele
  INNER JOIN team AS gast
    ON spiele.gast_id = team.team_id
  INNER JOIN team AS home
    ON spiele.home_id = home.team_id
 
Zuletzt bearbeitet von einem Moderator:
Hey danke für die Anwort, aber so ganz scheint es nicht zu klappen, es kommt noch folgende Fehlermeldung:

SQL:
 #1054 - Unknown column 'team.team_id' in 'on clause'

Habs überprüft, die Tabelle,Spalte gibt es definitiv, hab ich dann den Fremdschlüssel falsch eingebunden oder ist woanders noch der Fehler?

Danke für die Hilfe
 
Yaslaw hat die Tabelle "team" in der geposteten Abfrage mit dem Alias "gast" versehen. Demnach ist dieser Alias auch zu verwenden. Die Bedingung an dieser Stelle muss also von
Code:
ON spiele.gast_id = team.team_id
nach
Code:
ON spiele.gast_id = gast.team_id
geändert werden.

Grüße BN
 
jepp, bn hat recht.
Während dem schreiben des Beispieles wurde gerade das Nachtessen fertig... darum die Schlampige Arbeit *g*
 
Hallo Benzbob, hallo Tutorials-Gemeinde,

der Beitrag ist zwar schon etwas älter, aber ich habe genau das gleiche Problem. Allerdings habe ich das Problem unter MSSQL die Fremdschlüssel einer Tabelle auf den Primärschlüssel der anderen Tabelle zu referenzieren. Etwas ausführlicher:

Es gibt zwei Tabellen tblAnschluesse und tblVerbindungen.
tblAnschluesse
priAnschluesse <-- Primärschlüssel
Anschluesse

tblVerbindungen
priVerbindungen <-- Primärschlüssel
idxA <-- Fremdschlüssel referenziert auf tblAnschluesse(priAnschluesse)
idxB <-- Fremdschlüssel referenziert auf tblAnschluesse(priAnschluesse)

Ich kann einen Fremdschlüssel referenzieren, allerdings beim Anlegen des zweiten Fremdschlüssels bekomme ich immer eine Fehlermeldung. Liegt das an MSSQL z.B. eine Einstellung, die aus irgenwelchen Gründen diese Art von Referenzierung verhindert? Ich denke das Problem, das hier ja erfolgreich gelöst wurde ist das Gleiche. Nur wie lege ich die Constraints an?

Danke für für Deine/Eure Hilfe im Voraus,

Gruß, Holger
 
Hallo BaseBallBatBoy,

ich bin leider nicht mehr im Büro. Allerdings habe ich es sowohl im Datenbankdiagramm als auch im SQL-Editor versucht.

ALTER TABLE tblVerbindungen
ADD CONSTRAINT idx_VerbindungenA_Anschluesse
FOREIGN KEY(idxA) REFERENCES tblAnschluesse(priAnschluesse)

Ich hoffe ich habe das SQL-Statement aus dem Kopf richtig wiedergegeben. Jedenfalls kann ich den ersten Fremdschlüssel anlegen. Der zweite nach dem gleichen Schema

ALTER TABLE tblVerbindungen
ADD CONSTRAINT idx_VerbindungenB_Anschluesse
FOREIGN KEY(idxB) REFERENCES tblAnschluesse(priAnschluesse)

schlägt aber mit der Fehlermeldung, die ich jetzt nicht wiedergeben kann, fehl.

Gruß, Holger

EDIT: Habe das Ganze mal in MYSQL getestet. Kein Problem, beide Fremdschlüssel werden ohne Fehlermeldung eingetragen.

EDIT2: Problem gelöst!! Es fehlte WITH NOCHECK im Statement also

ALTER TABLE tblVerbindungen WITH NOCHECK
ADD CONSTRAINT idx_VerbindungenA_Anschluesse
FOREIGN KEY(idxA) REFERENCES tblAnschluesse(priAnschluesse)

Danke für Eure Hilfe.
Gruß, Holger
 
Zuletzt bearbeitet:
Zurück