2013-03-08 4 views
0

Привет, я пишу mysql-запрос для следующей структуры db.mysql query не возвращает ожидаемые значения

Professor (EMP ID,Name,Status,Salary,Age) 
Course(Course ID,Course Name,Points) 
Works(Course ID,EMP ID,Class ID) 
Assumptions: 
Each course has only one instructor in each semester 
Status can take values from “Full”, “Associate”, and “Assistant” 

Мне нужно сделать следующее.

Верните имена профессоров, которые когда-либо учили по крайней мере, два курса в одном классе

SELECT p.name 
FROM professor p, works w 
WHERE p.empid = w.empid 
AND p.status = ‘full’ 
AND w.classid IN (SELECT classid 
FROM works 
WHERE count(courseid)>1) 

возвращает имя (s) профессора (ов), учившего наибольшее количество курсов в классе 10

SELECT p.names 
FROM professor p, works w 
WHERE p.empid =w.empid 
AND w.classid IN (SELECT classid 
FROM works 
WHERE classid = 10 
AND coursed = max(coursed)) 

Но эти запросы возвращают неправильные результаты. Я новичок в mysql, пожалуйста, помогите.

+0

Вы должны прочитать о Явном соединении, GROUP BY и агрегатов. –

ответ

1

Попробуй как этот

SELECT 
    p.*, 
    COUNT(c.Course_ID) AS TCount 
FROM Professor AS P 
LEFT JOIN Works AS w ON w.EMP_ID = p.EMP_ID 
LEFT JOIN Course AS c ON w.Course_ID = c.Course_ID 
GROUP BY p.EMP_ID , c.Course_ID 
HAVING TCount > 1 
+0

Это вопрос, который у меня есть 2 – user1844638

+0

@ user1844638 Не можете ли вы, по крайней мере, проверить его и убедиться сами? –

1

Alternative ответ на первый:

SELECT DISTINCT p.empid, p.name 
FROM professor AS p 
JOIN works AS w ON 
    p.empid = w.empid 
JOIN works w2 ON 
    w.empid=w2.empid AND w.classid=w2.classid AND w.courseid<>w2.courseid 
Смежные вопросы