2016-05-05 14 views
1
student table teacher table sports table  parents table 
---------  --------------  ------------  --------------- 
id name  id name  id name   id stud_id fathername mothername 
------------ ------------ ------------  ----------------------------------------- 
1 S1   1  T1   1 SP1   1  1  xxxxxx  yyyyyyy 
2 S2   2  T2   2 SP2   2  2  abc   aaa  
3 S3   3  T3   3 SP3 

student_teacher table    student_sports table 
id stud_id  teacher_id  id  sutd_id sports_id 
------------------------------  ------------------------------ 
1  1   1    1  1   1 
2  1   2    2  1   2 
3  1   3    3  1   3 
4  2   2    4  3   2 
5  2   3    5  3   3 

Wie schreibe ich eine Abfrage, um Informationen von Schüler S1 aus der ganzen Tabelle zu erhalten. Zum Beispiel, Student S1 teilgenommen Sportname, Lehrer Name, wer Schüler S1 unterrichten, Schüler S1 Eltern Informationen. Hier sind ID in Schüler, Lehrer, Elterntabelle Primärschlüssel. stud_id, teacher_id, sports_id sind Fremdschlüssel, der Schüler, Lehrer, Sporttischprimärschlüssel bezeichnet. Bitte helfen Sie mir, den Datensatz von Student S1 von Tisch zu bekommen. Danke im Voraus.Wie die Schülerinformationen aus der Tabelle abgerufen werden?

Antwort

1

Sie einfach where-Klausel verwenden:

select S.name, T.name, SS.name, P.fathername, P.mothername 
from student S, teacher T, sports SS, parents P,student_teacher ST, student_sports SSP 
where S.id = ST.stud_id and T.id = ST.teacher_id and 
S.id = SSP.stud_id and SS.id = SSP.sports_id and 
S.id = P.stud_id 
1

Hier ist die Lösung:

select st.name as Student, t.name as teacher, sp.name as sports, p.fathername,p.mothername from student st,teacher t,sports sp,parents p,student_teacher s_t,student_sports s_s where s_t.stud_id=st.id and s_t.teacher_id=t.id and p.stud_id=st.id and s_s.stud_id=st.id; 
0

Sie müssen die student_teacher und student_sports Tabellen kombinieren. Es gibt keine Möglichkeit zu heiraten, welcher Lehrer welchen Schüler für einen bestimmten Sport unterrichtet hat. Wir wissen nur, dass Student 1 an Sport 1, 2 und 3 teilgenommen hat und von den Lehrern 1, 2 und 3 unterrichtet wurde. Wir wissen nicht, welcher Lehrer welchen Sport genommen hat. Sie sollten dies haben:

student_sports_teacher table 
+----+---------+-----------+------------+ 
| id | stud_id | sports_id | teacher_id | 
+----+---------+-----------+------------+ 
| 1 |  1 |   1 |   1 | 
| 2 |  1 |   2 |   2 | 
| 3 |  1 |   3 |   3 | 
| 4 |  2 |   1 |   2 | 
| 5 |  2 |   2 |   3 | 
+----+---------+-----------+------------+ 

Sobald Sie, dass Sie verwenden können, getan haben schließt sich alle Ihre Daten zu erhalten:

SELECT * FROM student s 
LEFT JOIN parents p ON s.id = p.stud_id 
LEFT JOIN student_sports_teacher sst ON sst.stud_id = s.id 
LEFT JOIN sports sp ON sp.id = sst.sports_id 
LEFT JOIN teacher t ON t.id = sst.teacher_id 
+0

Keine Notwendigkeit zu verwenden verwenden beitreten Links verbindet. OP verwendet Fremdschlüssel, sodass Sie keine verwaisten Datensätze mehr haben. –

+0

Nur eine Angewohnheit, ich gebe immer den Join-Typ an. – Styphon

0

Sie inneren

 select st.name as Student, t.name as teacher, sp.name as sports, 
      p.fathername,p.mothername 
    from student st 
    Inner join student_teacher as st on st s_t.stud_id=st.id 
    Inner join teacher t on s_t.teacher_id=t.id 
    Inner join parents p on p.stud_id=st.id 
    Inner join student_sports ss on ss.stud_id=st.id; 
Verwandte Themen