Выбор строк из таблицы, имеющего одинаковое значение для одного поля

StackOverflow https://stackoverflow.com/questions/4267412

  •  28-09-2019
  •  | 
  •  

Вопрос

У меня есть база данных MySQL с этими двумя таблицами:

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

Что такое запрос, чтобы вернуть инициалы и фамилии любого студента, который разделяет тот же репетитор?

Я старался SELECT intials, lastName FROM Student WHERE tutorId = tutorId Но это просто возвращает имена всех студентов.

Это было полезно?

Решение

Вам придется присоединиться к студентам против себя:

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 */

Другие советы

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

Это вернется (не проверено, но он должен) список студенческих инициаций и фамилию, сгруппированные Tutorid. Это то, что вы хотите?

Присоединиться к студенту таблицу к себе

SELECT S1.intials, S1.lastName
FROM Student S1, Student S2 
WHERE S1.tutorId = S2.tutorId 
AND S1.studentId <> S2.studentId

Это запрос на 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

Вам придется сделать запрос на каждый тренажер. Псевдокод:

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

Если вы хотите иметь список, содержащий все репетиторы, которые на самом деле имеют учеников, делают

SELECT tutorId FROM Student GROUP BY tutorId
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top