1

首先我有这个表结构和数据如下: 在此处输入图像描述

我想为特定学生的每门普通课程返回所有其他学生。

我正在使用这个查询:

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() 语句中的数据传递给真正的应用程序。

我希望我很清楚。

谢谢

4

1 回答 1

1

根据 partner.student_id 限制学生选择更有效。

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

如果没有过多研究您的特定查询,我想 DISTINCT 的使用表明您有一个笛卡尔积。通常,消除对基本本质的查询并从那里增强它是明智的。

于 2013-09-17T18:36:10.100 回答