1

我有一个包含这两个表的 MySQL 数据库:

Tutor(tutorId, initials, lastName, email, phone, office)
Student(studentId, initials, lastName, email, tutorId)

返回共享同一导师的任何学生的首字母和姓氏的查询是什么?

我试过SELECT intials, lastName FROM Student WHERE tutorId = tutorId 了,但这只是返回所有学生的名字。

4

5 回答 5

4

您必须与学生一起反对自己:

SELECT s1.initials, s1.lastName
FROM Student s1, Student s2
WHERE s1.studentId <> s2.studentID /* Every student has the same tutor as himself */
AND s1.tutorId = s2.tutorid

如果要输出对:

SELECT s1.initials, s1.lastName, s2.initials, s2.lastName
FROM Student s1, Student s2
WHERE s1.studentId <> s2.studentID /* Every student has the same tutor as himself */
AND s1.tutorId = s2.tutorid

获取导师名单 - 学生:

SELECT tutorId, GROUP_CONCAT( initials, lastName SEPARATOR ', ') 
FROM `Student` 
GROUP BY tutorId
/* to only show tutors that have more than 1 student: */
/* HAVING COUNT(studentid) > 1 */
于 2010-11-24T13:48:11.677 回答
1

SELECT Tutor.tutorId, Student.initials, Student.lastName FROM Student INNER JOIN Tutor ON Tutor.tutorId = Student.tutorId GROUP BY tutorId

这将返回(未经测试,但它应该)按tutorId 分组的学生姓名首字母和姓氏的列表。那是你要的吗?

于 2010-11-24T13:49:18.340 回答
1

将学生表加入自身

SELECT S1.intials, S1.lastName
FROM Student S1, Student S2 
WHERE S1.tutorId = S2.tutorId 
AND S1.studentId <> S2.studentId
于 2010-11-24T13:49:43.910 回答
0

这是 SQL Server 中的查询,我确信这个想法非常接近 mySql:

 select s1.initials,s1.lastname,s2.initials,s2.lastname from students s1 inner join students s2 on s1.tutorid= s2.tutorid and s1.studentid <> s2.studentid
于 2010-11-24T13:51:58.560 回答
-1

您必须对每个单独的导师 ID 进行查询。伪代码:

for id in tutorIds
    query('SELECT intials, lastName FROM Student WHERE tutorId = '+id )

如果你想要一个包含所有真正有学生的导师的列表,做一个

SELECT tutorId FROM Student GROUP BY tutorId
于 2010-11-24T14:01:42.343 回答