我需要在许多州的任何中找到所有没有相关记录的记录。
即:
项目有许多连接的人。
每个人都可以处于与项目有关的许多不同州之一(感兴趣,参与,左,踢,抱怨,完成等)。
因此,为了找到“没有人正在处理它们”的项目列表,我需要检查与项目相关的所有人员,并确保他们都处于某些状态。注:这意味着我真的只对People-Project连接表感兴趣。
这是我必须去的地方(基于SQL: Select records where ALL joined records satisfy some condition):
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。这实际上是在Rails 3项目中通过ActiveRecord构建的,但实质上我只是从头开始编写WHERE
子句。欢迎完全不同的方法!现在,我正在Ruby中进行过滤后查询...
答案 0 :(得分:1)
这对你有用吗?与存在类似
SELECT * FROM projects
WHERE id NOT IN (
SELECT project_id
FROM people_projects
WHERE state IN ('interested', 'left', 'kicked')
)