2011-11-06 65 views
-6

我想请求帮助。我有3张桌子。第一次查询3个mysql表

  1. students_name
  2. students_has_subjects
  3. 主题

什么是SQL语句查询3个表显示student_id数据,student_name,stud_subject,在此采取学生和主题描述。

我想要2种记录显示方式。

首先显示

1, Paul Mark, Math, Mathematics, Mathematics 
1, Paul Mark, English, English Language 
1, Paul Mark, Science, About Science 
2, John Mark, Math, Mathematics, Mathematics 
2, John Mark, English, English Language 
2, John Mark, Science, About Science 

第二显示

1, Paul Mark, Math, English, Science 
2, John Mark, Math, English, Science 

下面是表3样品和其记录。非常感谢。

students_name table 
student_id, student_name 
1, Paul Mark 
2, John Mark 

students_has_subjects 
id, stud_name, stud_subject 

1, Paul Mark, 1 
2, Paul Mark, 2 
3, Paul Mark, 3 
4, John Mark, 1 
5, John Mark, 2 
6, John Mark, 3 

Subjects 
subject_id, subject_name, description 

1, Math, Mathematics 
2, English, English Language 
3, Science, About Science 
+4

你有什么试过?提供家庭作业直接回应是违反本网站的性质。 – Miquel

+0

这功能吗?如果是这样,请标记为这样。一个提示,如果是:要获得以逗号分隔的主题列表,您将需要'GROUP_CONCAT()' –

+0

规范化在这里有点奇怪,在'students_name'和'students_has_subjects'之间键入学生名字,而不是键入'student_id '。如果你有能力改变这个模式,我会推荐这么做 –

回答

0

您必须使用2个连接来链接这3个表格。 INNER JOIN表示只有那些列出的元组,每个表中存在正确的元组。没有科目或错误subject_ids的学生将不会被列出。

请记住,访问X科目的学生也会列出X次。

SELECT n.student_id, n.student_name, s.subject_name, s.description FROM student_name n INNER JOIN student_has_subjects shs ON shs.stud_name = n.student_name INNER JOIN subjects s ON shs.stud_subject = s.subject_id

如果它是你的功课,请注明它作为一个!

+0

对不起,但这不是一项家庭作业。这是我的学校记录项目的一部分。我会尝试这个建议并发布结果。非常感谢。 –