3 votes

Requête de jointure compliquée

À l'origine, je faisais cela au moyen de quatre requêtes distinctes - je pense qu'il est temps d'optimiser mon code en utilisant des jointures...

J'ai quatre tableaux (comme indiqué ci-dessous) :

\[sl\_student\_course\]
student\_id (int 11)
------------------
course\_id (int 11)
------------------

\[sl\_project\_course\]
project\_id(int 11)
------------------
course\_id (int 11)
------------------

\[sl\_project\]
project\_id (int 11) - Primary Key -
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
professor\_id (int 11)
---------------------
project\_name (varchar 50)

\[sl\_professor\]
professor\_id(int 11) - Primary Key -
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
professor\_name (varchar 50)
---------------------
project\_email (varchar 50)

De quelles informations ai-je besoin ?

J'ai besoin de toutes les données de sl_project y sl_professor donde sl_student_course.course_id = sl_project_course.course_id ET alors je dois utiliser le project_id de sl_project_course

ALORS...

sl_student_course.course_id --> sl_project_course.project_id --> sl_project.professor_id , sl_project.project_name , --> sl_professor.professor_name , sl_professor.professor_name

Est-ce que cela a un sens ?

  • Si ce n'est pas le cas, voici un autre exemple !

    sl_student_course course_id | 1

    sl_project_course project_id | 1 course_id | 1

    sl_project project_id | 1 professor_id | 2 project_name | project1

    sl_professor professor_id | 2 professor_name | John Doe professor_email | John@Doe.com

4voto

Bort Points 4274

En espérant avoir bien compris les relations de votre table, qui a des professeurs joints à des projets (dans la table sl_project).

Vous obtiendrez ainsi les données relatives aux projets et aux professeurs (en utilisant TSQL) :

SELECT P.project_name, F.professor_name, F.professor_email
FROM sl_project P
    INNER JOIN sl_professor F ON F.professor_id = P.professor_id

    -- Not sure where course is coming into play, since you aren't selecting
    -- anything from the students/course table, but if you need to ensure there is a
    -- course for this project and students in the course, these joins are necessary.
    INNER JOIN sl_project_course C ON C.project_id = P.project_id
    INNER JOIN sl_student_course S ON S.course_id = C.course_id
WHERE P.project_id = @project_id

1voto

j13r Points 1515

Essayez quelque chose de ce genre :

 select sl_project.project_name, sl_professor.professor_name, sl_professor.professor_email 
 from sl_student_course
 natural join sl_project_course
 natural join sl_project
 natural join sl_professor

La jointure naturelle est agréable parce qu'elle préfère la convention à la configuration. Ainsi, si vous concevez votre base de données de la manière attendue, vous ne risquez rien.

Mise à jour : remplacé * par les champs spécifiques demandés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X