2010-11-24 6 views
1

Ich habe eine MySQL-Datenbank mit diesen beiden Tabellen:Auswählen Zeilen aus einer Tabelle, die denselben Wert für ein Feld haben

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

Was die Abfrage ist, die Initialen und Nachnamen aller Schüler zurückzukehren, die den Anteil derselbe Tutor?

Ich versuchte SELECT intials, lastName FROM Student WHERE tutorId = tutorId, aber das gibt nur die Namen aller Schüler.

+0

Das macht keinen Sinn. Bitte erläutern Sie den Hintergrund. – joni

+0

Was genau möchten Sie abrufen? –

+0

Ich versuche, die Namen aller Schüler, die den gleichen Tutor teilen, abzurufen. – bananamana

Antwort

4

Sie müssen Studenten beitreten gegen sich selbst:

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 

Wenn Sie ausgeben möchten die Paare:

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 

Um eine Liste der Tutor zu bekommen - Studenten:

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

Gibt das nicht alle Schüler von Tutoren, die mindestens 2 Schüler haben? Ich bezweifle, dass du das willst. –

+0

Ja, das funktioniert! Vielen Dank – bananamana

+0

@bananamana: welche? Es war nicht genau klar was du wolltest, also habe ich einfach eine Menge Lösungen geworfen - aber jetzt bin ich gespannt was du willst :) – Konerak

1

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

Dies wird (nicht getestet, aber es sollte) eine Liste von Schülerinitialen und Nachnamen, gruppiert nach TutorId, zurückgeben. Ist es das was du willst?

+0

Nein, ich versuche die Namen von Schülern zu finden, die denselben Tutor haben. – bananamana

1

sich Registriert Schülertisch

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

@Konerak - danke Tippfehler korrigiert – T33C

0

dies die Abfrage in SQL Server ist, im sicher, dass die Idee ist ganz in der Nähe 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 
-1

Sie eine Abfrage für alle machen müssen einzelne tutorId. Pseudo-Code:

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

Wenn Sie möchten, eine Liste haben alle Tutoren enthalten, die tatsächlich Studenten haben, machen einen

SELECT tutorId FROM Student GROUP BY tutorId