2010-11-18 10 views
0

Ich habe die folgenden MySQL-Tabellen. Sie repräsentieren CS-Kurse an einer Schule und Bewerber als TA (Lehrassistent) für bestimmte Kurse.Auswahl der Bewerber für Positionen über eine MySQL-Abfrage

Ich möchte eine Abfrage erstellen, die die „beste“ Antragsteller für jeden Kurs gedruckt wird. Die Einschränkungen für die besten Bewerber sind:

  1. Bewerber mit Applicants.level = 7 zuerst abgestimmt sind.
  2. Bewerber mit ApplicantsToCourses.returning = true sind zweite gewählt.
  3. Alle anderen Bewerber werden ohne weitere Diskriminierung abgestimmt.

Die Tabellendefinitionen sind:

CREATE TABLE Courses (
course_number SMALLINT(3) UNSIGNED NOT NULL, 
course_section SMALLINT(1) UNSIGNED NOT NULL, 
name CHAR(30) NOT NULL, 
instructor CHAR(30), 
lab_time CHAR(30), 
PRIMARY KEY(course_number, section), 
FOREIGN KEY(course_number, section) REFERENCES ApplicantsToCourses(course_number, course_section) 
) 

CREATE TABLE Applicants (
student_id CHAR(10) NOT NULL, 
name CHAR(30), 
email CHAR(30), 
gpa DECIMAL(4,3) UNSIGNED, 
level CHAR(2), 
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
PRIMARY KEY(student_id), 
FOREIGN KEY(student_id) REFERENCES ApplicantsToCourses(student_id), 
CHECK(gpa <= 4.000) 
) 

CREATE TABLE ApplicantsToCourses (
student_id CHAR(10) NOT NULL, 
returning BOOLEAN DEFAULT FALSE NOT NULL, 
course_number SMALLINT(3) UNSIGNED NOT NULL, 
course_section SMALLINT(1) UNSIGNED NOT NULL, 
PRIMARY KEY(student_id, course_number, course_section), 
FOREIGN KEY(student_id) REFERENCES Applicants(student_id), 
FOREIGN KEY(course_number, course_section) REFERENCES Courses(course_number, course_section) 
) 

bei einer Abfrage Mein Versuch war. . .

select a.student_id, ac.course_number, ac.course_section 
from Applicants a, ApplicantsToCourses ac, Courses c 
where a.student_id = ac.student_id and ac.course_number = c.course_number and ac.course_section = c.course_section 
order by a.level, ac.returning desc 

. . . aber das hat sicher nicht die richtige Logik.

+0

Ist das eine Hausaufgabenfrage? Inwiefern ist Ihre Anfrage falsch? Was stimmt nicht mit den Ergebnissen, die es zeigt? –

Antwort

0

Sie können den folgenden Pseudo-Code verwenden, um einige temporäre Tabellen zu erstellen, die Sie erreichen Ihre endgültige Lösung helfen sollte.

SELECT * 
FROM Applicants APP 
JOIN ApplicantsToCourses ATC ON ATC.student_id = APP.student_id 
JOIN Courses COU ON COU.number = ATC.course_number AND COU.section = ATC.course_section 
WHERE APP.level = 7 

SELECT * 
FROM Applicants APP 
JOIN ApplicantsToCourses ATC ON ATC.student_id = APP.student_id 
JOIN Courses COU ON COU.number = ATC.course_number AND COU.section = ATC.course_section 
WHERE ATC.returning = true 
Verwandte Themen