выборка из одной таблицы того, что нет в другой таблице :)

kompo

Guest
выборка из одной таблицы того, что нет в другой таблице :)

Этот вопрос глуп и никак не связан с php. Надеюсь, не offtopic :)

Перейду сразу к конкретике.

Есть разные интересные таблицы. В одной студенты, в другой курсы, в третьей отметки студентов по разным курсам.

Туплю в написании selecta, который бы выбирал тех студентов, у которых нет отметок по-данному курсу в таблице с отметками.
 

tony2001

TeaM PHPClub
SELECT s.name FROM student as s LEFT JOIN marks as m ON m.student_id = s.id WHERE m.student_id IS NULL;
вообще про лефт джойн почитай в мане - там даже пример на эту тему есть.
 

kompo

Guest
Автор оригинала: tony2001
SELECT s.name FROM student as s LEFT JOIN marks as m ON m.student_id = s.id WHERE m.student_id IS NULL;
Спасибо, Тони... Но меня пугают такие конструкции. Сейчас почитаю и усиленно подумаю. Кстати, когда ты говоришь про ман, ты подразумеваешь http://www.mysql.com/doc/en/JOIN.html ? :)

Но вот будет ли работать такая конструкция при условии, что у меня в отметках может быть много раз записан id студента, который будет относиться просто к разным курсам?
 

tony2001

TeaM PHPClub
>Кстати, когда ты говоришь про ман, ты подразумеваешь
да, в том районе.

>Но вот будет ли работать такая конструкция при условии, что у меня в
>отметках может быть много раз записан id студента, который будет
>относиться просто к разным курсам?
будет.
смысл остается тем же - выбрать все записи, ид которых не присутствует во второй таблице.
не уверен только насчет оптимальности в данном случае - MySQL сначала сделает джойн, а потом отберет только все записи без соответствий...
 

chira

Новичок
Запрос tony не совсем полный
Если таблица marks является связующей
student -> marks(student_id,kurs_id,estimation) -> kurs,
то
Ответ на вопрос у каких студентов нет отметок по данному курсу (к примеру kurs_id = 10)

SELECT s.name FROM student as s LEFT JOIN marks as m ON m.student_id = s.id AND m.kurs_id = 10 WHERE m.student_id IS NULL
 

kompo

Guest
Автор оригинала: chira
Запрос tony не совсем полный
Если таблица marks является связующей
student -> marks(student_id,kurs_id,estimation) -> kurs,
то
Ответ на вопрос у каких студентов нет отметок по данному курсу (к примеру kurs_id = 10)

SELECT s.name FROM student as s LEFT JOIN marks as m ON m.student_id = s.id AND m.kurs_id = 10 WHERE m.student_id IS NULL
ну да..

я правда решил эту проблему прибавлением right joina
приведу в своих значках ;)

select de_students.st_surname, de_students.st_id from de_students LEFT JOIN de_marks ON de_students.st_id=de_marks.m_student RIGHT JOIN de_courses ON de_marks.m_course=de_courses.co_id where de_marks.m_student IS NULL and and de_courses.co_id=10

пока работает :) что потом будет - не знаю :))
 
Сверху