MYSQL查询显示所有在表中有共同课程的学生

时间:2013-09-17 18:19:46

标签: mysql

首先,我有这个表结构和数据如下: enter image description here

我想让所有其他学生回答他们为特定学生开设的每门课程。

我正在使用此查询:

SELECT  DISTINCT students.name AS StudentName, students.id as StudentId, courses.id AS   
CourseId,courses.name AS CourseName, universities.id AS University FROM partners
INNER JOIN students ON students.id = partners.student_id
INNER JOIN courses ON courses.id = partners.course_id
INNER JOIN universities ON universities.id = partners.university_id
WHERE students.id != '1' AND partners.course_id IN('6','2','1')
GROUP BY students.name
ORDER BY date

它返回给我正确的结果,但事情是它似乎并不是非常有效,特别是我想知道如何在IN()语句中传递真实应用程序中的数据。

我希望我很清楚。

由于

1 个答案:

答案 0 :(得分:1)

根据partners.student_id限制学生选择效率更高。

分组student.name是一项非常昂贵的操作。请改用partners.student_id。

如果没有对您的具体查询进行过多研究,我猜DISTINCT的使用建议您使用笛卡尔积。通常,将查询消除到裸露的本质并从那里增强它是明智的。