Sql结果重复:错误的查询拼写或不适当的数据库结构?

时间:2014-06-12 13:34:41

标签: mysql sql

作为学校ERP系统的一部分,我有一个包含中心所有课程的表格,将每个班级(cl_id)与特定课程(cl_fk_co_id)和教师联系起来(cl_fk_te_id)。如您所见,教师可以与具有相同课程的几个班级相关(例如:教师ID 3与两个班级(ID 39和ID 42)中的课程ID 302相关:

table example

现在我需要选择这位老师给出的所有课程,并用WHILE列出。在这里您有查询:

$selectCoursesFilter = select("SELECT * FROM class_conf JOIN course_conf ON co_id=cl_fk_co_id WHERE cl_fk_te_id='3'");

while($registroCourses = consultaRegistro($selectCoursesFilter)){                       
    $course_conf_filter_list_prev.='<option value="'.$registroCourses['co_id'].'">'.$registroCourses['co_name'].'</option>';}

此WHILE结果为3 co_id个记录而不是两个:306,302和302.在这种情况下,即使302在表格中列出两次,并由同一位老师给出(类别ID 39&amp; ; ID 42),只应列出一次,因为它是相同的课程。

据我所知,它会在此查询中找到3条记录,但我不知道避免每门课程之间重复的正确方法。是DDBB worng结构化还是查询错误拼写?

1 个答案:

答案 0 :(得分:1)

这是您的查询:

SELECT *
FROM class_conf JOIN
     course_conf
     ON co_id=cl_fk_co_id
WHERE cl_fk_te_id = '3';

数据有三个维度 - 课程,课程和教师。你只看其中两个。所以,当一门课程有一个老师但有多个班级时,你会得到重复的。

你如何解决这个问题取决于你想做什么。也许这就是你想要的:

SELECT DISTINCT co_id, co_name
FROM class_conf JOIN
     course_conf
     ON co_id = cl_fk_co_id
WHERE cl_fk_te_id = '3';