@mantovpinets

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

Всем доброго времени суток.

Возникла проблема с формированием запроса. Есть таблица, в ней указаны индексы образовательных курсов, их названия и их год проведения. Разные курсы могут проводиться в разные года, и список курсов обновляется каждый год. Есть также таблица с зачислениями студентов, где указывается дата зачисления и номер курса, на который он зачислен. Однако известно, что в таблице курсов есть потеря данных (может потерялись при переносе или как, не суть). Но нужно узнать, какие именно курсы пропали. Для этого достаточно знать индекс курса. Известно также, что в таблице зачислений потерь нет и данные там корректные. Так вот вопрос. Как сформировать запрос, чтобы выбрать из таблицы зачислений номера курсов, которых нет в таблице курсов? Было бы проще, если бы каждый курс каждый год был под одним индексом, тогда просто Right join и всё. Но здесь фишка в том, что в 2011 году под индексом 210 может быть один курс, а в 2012 по этим индексом уже другой курс. И индексы со всех лет просто смешаны в одной таблице.
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
если правильно понял задачу тогда как-то так
SELECT
	`enrollment_for_courses`.`course_code`,
	YEAR (
		`enrollment_for_courses`.`date`
	) as course_year,
  `courses`.`code`
FROM
	`enrollment_for_courses`
LEFT JOIN `courses` ON `courses`.`code` = `enrollment_for_courses`.`course_code`
AND `courses`.`year` = YEAR (`enrollment_for_courses`.`date`)
WHERE `courses`.`code` IS NULL
GROUP BY `enrollment_for_courses`.`course_code`, course_year


`enrollment_for_courses` - таблица зачислений на курс
`enrollment_for_courses`.`course_code` - код курса в таблице зачисления на курс
`enrollment_for_courses`.`date` - дата зачисления на курс
`courses` - таблица курсов
`courses`.`code` - код курса в таблица курсов
`courses`.`year` - год курса в таблице курсов
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
EreminD
@EreminD
Кое-что умею
Я бы начал копать отсюда
SELECT DISTINCT t1.course_index FROM students_on_courses t1
WHERE t1.course_index NOT IN 
(SELECT t2.index FROM courses t2 )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы