я работаю в системе регистрации, которая использует следующие таблицы: Person (имя и т.д.), курс (дата курса), регистрация (объединение таблицы Pid, чид)Помощь с MySQL присоединиться к 3 Таблицы
Person +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | text | YES | | NULL | | +-------+---------+------+-----+---------+-------+ Example Data: select * from person; +-----+--------+ | id | name | +-----+--------+ | 101 | Graham | | 102 | Lisa | | 103 | John | +-----+--------+ Course +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | text | YES | | NULL | | | date | date | YES | | NULL | | +-------+---------+------+-----+---------+-------+ select * from course; +----+---------+------------+ | id | name | date | +----+---------+------------+ | 1 | Hip Hop | 2011-06-08 | | 2 | Dancing | 2006-06-23 | | 3 | Running | 2007-07-08 | +----+---------+------------+ Registration +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | pid | int(11) | YES | | NULL | | | cid | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ select * from registration; +----+------+------+ | id | pid | cid | +----+------+------+ | 1 | 101 | 1 | | 2 | 101 | 2 | | 3 | 103 | 2 | +----+------+------+
Я хотел бы найти человека, у которого нет регистрационных записей в течение последних двух лет. Я пытаюсь присоединиться к таблицам на основе расчета даты, но похоже, что это не так. Возможно ли это с помощью mysql или мой подход попробовать это с одним запросом неправильно?
запрос я придумал:
select * from (person left join registration on person.id = registration.pid) left join course on course.id = registration.cid AND DATE_FORMAT(`course`.`date`, "%m.%Y") > DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 2 YEAR),"%m.%Y") WHERE registration.id IS NULL; +-----+------+------+------+------+------+------+------+ | id | name | id | pid | cid | id | name | date | +-----+------+------+------+------+------+------+------+ | 102 | Lisa | NULL | NULL | NULL | NULL | NULL | NULL | +-----+------+------+------+------+------+------+------+
Он должен перечислить человек, 102 и 103, так как регистрация старше 2-х лет и никаких других записей о новых датах курса можно найти ...
Think подвыборки: 'SELECT * FROM человека WHERE ID NOT IN (SELECT FROM PID .... РЕГИСТРИРУЙТЕСЬ ....)' – Erik