SQL / Rails查找零关联记录处于给定状态的记录

时间:2012-01-20 12:35:14

标签: sql where-clause

我需要在许多州的任何中找到所有没有相关记录的记录。

即:

项目有许多连接的人。

每个人都可以处于与项目有关的许多不同州之一(感兴趣,参与,左,踢,抱怨,完成等)。

因此,为了找到“没有人正在处理它们”的项目列表,我需要检查与项目相关的所有人员,并确保他们都处于某些状态。注:这意味着我真的只对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中进行过滤后查询...

1 个答案:

答案 0 :(得分:1)

这对你有用吗?与存在类似

SELECT * FROM projects
WHERE id NOT IN (
    SELECT project_id
    FROM people_projects
    WHERE state IN ('interested', 'left', 'kicked')
)