1

次の2つのテーブルを持つ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

Studentテーブルをそれ自体に結合する

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

これはSQLServerのクエリであり、アイデアが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

すべてのtutorIdに対してクエリを作成する必要があります。擬似コード:

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 に答える