Вывод значения совподающего со многими

Trix
Дата: 12.12.2007 02:35:19
Люди подскажите, ни как лабу решить не могу.

Есть две таблицы предметы и успеваемость, нужно вывести только тех студентов которые сдали ВСЕ экзамены, таблицы соединяются по номеру студента

Если соединять так:

select номер_студента from успеваемость y
JOIN предмет p
ON 
y.номер_предмета=p.номер_предмета
where курс=1;

То естественно выводятся все студенты которые хоть что-то сдали, а как вывести именно того который сдал ВСЕ предметы, не выводя тех которые сдали не все.

Хелп плиз....
Бабичев Сергей
Дата: 12.12.2007 05:26:32
Лабы нужно решать самостоятельно.
Поэтому готового решения не дам, но подсказать - подскажу.
Для решения твоей задачи тебе необходимо:
1) Узнать количество изучаемых дисциплин, по которым идет проверка успеваимости (другими словами нужно узнать количество экзаменов)
2) Для каждого студента вычислить количество успешно прошедших экзаменов
3) Применить фильтр, отсеивающий лишь тех студентов, которые сдали столько экзаменов, сколько нужно было сдать.

Если что, то для этого тебе нужно к таблице УСПЕВАЕМОСТЬ применить GROUP BY и HAVING. В качестве условия фильтрации в HAVING использовать информацию о количестве экзаменов из таблицы ПРЕДМЕТЫ.
_Alex_SMIRNOV_
Дата: 12.12.2007 10:08:57
Где-то я уже встречал эту задачку в on-line тестах
Trix
Дата: 12.12.2007 10:43:05
Спасибо за подсказку, сейчас попробую ! Надеюсь получится наконец, Хотя вроде пытался уже group by использовать ! Ну ни чего медленно но верно :)
Trix
Дата: 12.12.2007 11:42:34
Может еще подскажите, не выходит! ни как не вывести именно ту строку которая соответствует нескольким строкам в другой таблице вот пытаюсь так, но так не работает
select номер_студента from успеваемость 
group by номер_студента 
having номер_предмета in 
(select номер_предмета from предметы where Курс=1)

Если делать чтобы такой запрос работал то он выводит все строки

select номер_студента,номер_предмета from успеваемость 
group by номер_студента 
having номер_студента,номер_предмета in 
(select номер_предмета from предметы where Курс=1)

Заранее спасибо, уже 3й день не могу разобраться !
Бабичев Сергей
Дата: 12.12.2007 11:49:48
Trix
Может еще подскажите, не выходит! ни как не вывести именно ту строку которая соответствует нескольким строкам в другой таблице вот пытаюсь так, но так не работает
select номер_студента from успеваемость 
group by номер_студента 
having номер_предмета in 
(select номер_предмета from предметы where Курс=1)

Если делать чтобы такой запрос работал то он выводит все строки

select номер_студента,номер_предмета from успеваемость 
group by номер_студента 
having номер_студента,номер_предмета in 
(select номер_предмета from предметы where Курс=1)

Заранее спасибо, уже 3й день не могу разобраться !


Ещё чуток подумай. Уже очень близко к верному решению...
Дам ещё пару подсказок, сам додумайся куда их вставить:
group by номер_студента
having count(номер_предмета )
select count(номер_предмета ) from ...
Jannny
Дата: 12.12.2007 11:51:37
Бабичев Сергей
on-line обучение? :)
Фига себе
Дата: 12.12.2007 11:53:08
Подсказка - конструкцию HAVIG используете абсолютно неверно.
Неплохо бы для начала почитать ее назначение.
Хотя бы здесь или pltcm
Бабичев Сергей
Дата: 12.12.2007 11:53:38
Jannny
Бабичев Сергей
on-line обучение? :)
Ну, я даже х.з. как это называется :) ;)
Trix
Дата: 12.12.2007 11:53:39
2 janny - а что делать если спросить не у кого, а решить надо, а у самого не выходит !