Мне нужно найти все записи, которые не имеют связанных записей в любом нескольких состояний.
т.е:.
В проектах есть несколько связанных людей.
Каждый человек может находиться в одном из нескольких различных состояний в отношении Проекта (заинтересованный, участвующий, оставленный, выгнанный, жалованный, законченный и т. Д.).
Итак, чтобы найти список проектов, в которых «никто не работает», мне нужно проверить всех людей, имеющих отношение к проекту, и убедиться, что все они находятся в определенных штатах. Нотабене Это означает, что меня действительно интересует только таблица присоединения People-Project.
Вот где я должен (на основе SQL: выбрать записи, в которых ВСЕ присоединенные записи удовлетворяют некоторому условию ):
SELECT * FROM projects
WHERE NOT EXISTS (
SELECT NULL FROM people_projects AS pp
WHERE pp.project_id = projects.id AND (
pp.state = 'interested' OR
pp.state = 'left' OR
pp.state = 'kicked'
)
Кажется, это работает до некоторой степени, то есть возвращает что-то, а не все. Тем не менее, некоторые возвращенные записи определенно имеют связанные people_projects
записи, которые находятся в одном из запрещенных состояний, и есть по крайней мере одна найденная мной запись без people_projects
в любом из состояний, которая является не вернулся.
Любой совет высоко ценится.
N.B. Это на самом деле создается через ActiveRecord в проекте Rails 3, но по сути я просто пишу предложение WHERE
с нуля. Совсем разные подходы приветствуются! Сейчас я делаю этот пост-запрос фильтрации в Ruby ...