2013-06-18 2 views
0

У меня есть следующие таблицыписьма подзапрос в предложении где

student(student_id, name) 
assignment(student_id, course_code, assignment number) 

Я пытаюсь написать запрос, чтобы вернуть тех студентов, которые представили назначения номер 1 для определенного курса, но не присвоения номера 2

Я написал следующий запрос, но изо всех сил стараюсь, чтобы он возвращал результаты по курсу. Какие-либо предложения?

SELECT name, a.student_id, course_code 
FROM assignment a INNER JOIN student s 
on a.student_id = s.student_id 
WHERE assignment_number = 1 
AND assignment_number != 2 

ответ

1
SELECT 
    s.name, 
    s.student_id, 
    a.course_code 
FROM 
    assignment a 
INNER JOIN 
    student s 
ON 
    a.student_id = s.student_id 
WHERE 
    assignment_number in(1,2) 
GROUP BY 
    s.name, 
    s.student_id, 
    a.course_code 
HAVING max(assignment_number) = 1 
+0

большое спасибо. он вернул ожидаемые результаты – zan

2
SELECT name, a.student_id, course_code 
FROM assignment a INNER JOIN student s 
on a.student_id = s.student_id 
WHERE assignment_number = 1 
AND not exists (select * from 
       assignment a2 inner join student s2 
       where a2.student_id = s2.student_id 
       and s2.student_id = s.student_id 
       and a2.assignment_number = 2) 

Вот скрипку, чтобы увидеть его в действии: http://sqlfiddle.com/#!2/48997/2

+0

Это правильно что вы используете 'NOT EXISTS', а затем'! = 2' – Lamak

+0

@Lamak - спасибо, исправлено – dcp

0

Список студентов, которые имеют выполненное задание 1, но не выполненное задание 2:

select s.name, a.student_id, a.course_code 
from assignment a 
inner join student s on a.student_id = s.student_id 
where a.student_id in 
    (Select student_id from assignment 
    where assignment_id = 1) -- All students that submitted Assignment 1 
and a.assignment_id !=2 
Смежные вопросы