首先,我有如下的表结构和数据:

我想返回所有其他学生的每门公共课程,他们有一个特定的学生。
我使用的是这个查询:
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()语句中的数据。
我希望我说得够清楚了。
谢谢
发布于 2013-09-18 02:36:10
基于partners.student_id对学生的选择进行限制会更加有效。
在students.name上使用Group by是一个非常昂贵的操作。请改用partners.student_id。
在没有对您的特定查询进行过多研究的情况下,我猜DISTINCT的使用表明您有一个笛卡尔乘积。通常情况下,明智的做法是消除查询的本质,并从那里增强它。
https://stackoverflow.com/questions/18857080
复制相似问题