2013-03-18 3 views
0

J'ai quatre tables: personne, entraîneur, joueur, jeux. Je dois écrire une instruction SQL SELECT qui renverra: mon identifiant, mon nom, ma date de naissance, ma date d'inscription, le nom de l'entraîneur avec lequel je suis inscrit et la date, l'heure et la durée du match.Comment écrire une instruction SQL SELECT qui renvoie des valeurs de plusieurs tables?

La table de personnes comprend: ID de personne, nom, date de naissance et autres valeurs inutiles. La table d'entraîneur comprend: l'identifiant de l'entraîneur et quelques autres valeurs inutiles. La table du joueur se compose de: id du joueur, date de la jonction, joint avec. La table de jeu comprend: l'identifiant de l'entraîneur, l'identifiant du joueur, la date du match, l'heure du match, la durée du match.

La table des personnes stocke essentiellement tous les noms et les principaux détails de l'entraîneur et des joueurs. Les tables sont liées correctement.

J'ai essayé plusieurs instructions mais je me suis totalement confondu. L'exemple est un peu boiteux, j'avais quelque chose d'autre mais je ne suis pas vraiment sûr de la façon de le faire.

par exemple.

SELECT person_id, full_name, date_of_birth, join_date 
FROM (person JOIN player ON player_id = person_id) 
WHERE person_id='100' AND person_id, full_name 
FROM (person JOIN coach ON coach_id = person_id); 

Ce sont les déclarations: CREER

CREATE TABLE person (
     person_id   CHAR(10) NOT NULL, 
     full_name   VARCHAR(54) NOT NULL, 
     date_of_birth  DATE, 
     sex    CHAR(1), 
    PRIMARY KEY (person_id) 
) engine innodb; 
CREATE TABLE coach (
     coach_id   CHAR(10) NOT NULL, 
     phone_no   CHAR(10) NOT NULL, 
     hall_no   CHAR(4) NOT NULL, 
    PRIMARY KEY (coach_id), 
    FOREIGN KEY (coach_id) REFERENCES person (person_id) 
) engine innodb; 
CREATE TABLE player (
     player_id  CHAR(10) NOT NULL, 
     join_date DATE  NOT NULL, 
     joined_with CHAR(10), 
    PRIMARY KEY (player_id), 
    FOREIGN KEY (player_id) REFERENCES person (person_id), 
    FOREIGN KEY (joined_with) REFERENCES coach (coach_id) 
) engine innodb; 
CREATE TABLE game (
     coach_id  CHAR(10) NOT NULL, 
     player_id  CHAR(10) NOT NULL, 
     game_date  DATE  NOT NULL, 
     game_time  TIME  NOT NULL, 
     game_duration INTEGER DEFAULT 10, 
    PRIMARY KEY (coach_id, player_id, game_date, game_time), 
    FOREIGN KEY (coach_id) REFERENCES coach (coach_id), 
    FOREIGN KEY (player_id) REFERENCES player (player_id) 
) engine innodb; 
+1

L'utilisation d'une syntaxe valide aidera. Publiez les messages d'erreur * real * et/ou une sortie inattendue. Cependant, je suggère de lire quelques "didacticiels de jointure SQL", ce qui permettra de formuler une meilleure question de base. –

+0

Veuillez ajouter vos instructions create à la question. –

+0

J'ai ajouté les instructions create. Il n'y a pas de message d'erreur parce que je n'ai pas de déclaration, je pense que vous avez mal compris la question. Merci pour le -1. Je comprends que j'aurais dû faire plus de recherches sur ce sujet moi-même et je l'aurais fait si ce n'était pas pour des circonstances imprévues. Je suis sûr que je peux tout comprendre par moi-même, mais j'ai besoin de plus de temps que je n'ai pas actuellement. – Hazzle

Répondre

1

Votre SQL est désactivé. On dirait que vous essayez de ce qui suit juste en utilisant plusieurs INNER JOINs:

SELECT p.person_id, p.full_name, p.date_of_birth, pl.join_date, 
    c.coach_id, p2.full_name as coach_name, g.* 
FROM person p 
    JOIN player pl ON p.person_id = pl.player_id   
    JOIN game g ON p.person_id = g.player_id 
    JOIN coach c ON c.coach_id = g.coach_id 
    JOIN person p2 on c.coach_id= p2.person_id   
WHERE p.person_id='1' 
ORDER BY p.person_id, p.full_name 

Vous aurez pas besoin de rejoindre sur personne une deuxième fois si vous n'avez pas besoin de nom de l'entraîneur - Je viens présumé qui se être des informations utiles.

SQL Fiddle Demo

+0

C'est parfait, juste ce dont j'avais besoin. Ceci est vraiment utile pour moi car je peux maintenant l'inverser et en tirer des leçons. Ce sera utile avec certaines des autres déclarations que je dois écrire. Merci de faire un lien vers SQL Fiddle, il sera utile à l'avenir. Je ne peux pas voter pour l'instant, mais une fois que j'aurai assez de points de rep. Je vous remercie. :) – Hazzle

+0

@Hazzle - NP, heureux que je pourrais aider. Bonne chance! – sgeddes

0

J'espère que cela aide.

SELECT person.person_id, person.full_name, person.date_of_birth, player.join_date 
FROM person 
INNER JOIN player 
    ON player.player_id = person.person_id 
WHERE person.person_id = '100' 
+0

Merci d'essayer d'aider, pas tout à fait ce dont j'avais besoin par rapport à la réponse ci-dessus, même si je serais en mesure de continuer à partir de cela, alors merci encore une fois. – Hazzle

Questions connexes