Как сформулировать SELECT?
У меня есть две таблицы. Таблица занятий
CREATE TABLE IF NOT EXISTS `ja_yoga`.`lessons` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`date` DATE NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE = InnoDB
и таблица планируемых посещений этих занятий
CREATE TABLE IF NOT EXISTS `ja_yoga`.`future_lessons` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`lesson` INT UNSIGNED NOT NULL,
`user` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `lesson`
FOREIGN KEY (`lesson`)
REFERENCES `ja_yoga`.`lessons` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `users`
FOREIGN KEY (`user`)
REFERENCES `ja_yoga`.`users` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
)
ENGINE = InnoDB
Для простоты будем считать, что на каждое отдельное занятие может быть записано неограниченное число разных людей.
Мне нужно найти дни, на которые можно перенести занятие юзера с future_lessons.user=N (и на которые у него пока не запланированы занятия). Для этого я должен, как я понимаю, сформулировать SELECT, который бы выбирал из таблицы lessons все записи, которые бы соответствовали такому условию: в таблице future_lessons НЕ ДОЛЖНО быть записей, у которых future_lessons.lesson=lessons.id и при этом future_lessons.user=N. Как мне сформулировать такой запрос?
Ответы (2)
SELECT date
FROM ja_yoga.lessons l
LEFT JOIN ja_yoga.future_lessons fl
ON l.id = fl.lesson
WHERE fl.user != 'someValue'
надеюсь что я праивльно понял то, что ты ниже описывал...
SELECT date
FROM ja_yoga.lessons
WHERE id NOT IN (SELECT lesson FROM ja_yoga.future_lessons WHERE user = 'someValue')
для тех кто будет рассказывать о джойнах)
Классный пример без джойнов, мне уже много раз пригодился. Спасибо!