Sql 查询不存在的habtm记录

Sql 查询不存在的habtm记录,sql,ruby-on-rails,has-and-belongs-to-many,Sql,Ruby On Rails,Has And Belongs To Many,对于初学者的问题,我很抱歉。 我有资产和项目之间的关系。假设我在所有资产中循环,我希望找到与此资产无关的所有项目,但这不起作用: Project.includes(:assets).where("assets.id != ?", asset.id) 什么是正确的查询 如果要查找与特定资产不相关的所有项目,类似的方法应该可以工作,但未经测试,因此需要调整: Project.joins(:assets_projects).where("assets_projects.asset_id != ?",

对于初学者的问题,我很抱歉。 我有资产和项目之间的关系。假设我在所有资产中循环,我希望找到与此资产无关的所有项目,但这不起作用:

Project.includes(:assets).where("assets.id != ?", asset.id)

什么是正确的查询

如果要查找与特定资产不相关的所有项目,类似的方法应该可以工作,但未经测试,因此需要调整:

Project.joins(:assets_projects).where("assets_projects.asset_id != ?", asset_id)
asset_id是您的资产实例的id

此外,您不应该通过循环资产来查找与迭代当前资产相关的所有项目,这意味着太多的数据库调用—这就是所谓的N+1问题—可以找到一个很好的解释,例如。要仅通过一个查询查找与任何资产不关联的所有项目,请执行以下操作:

Project.find_by_sql(%(
  SELECT * FROM projects
  WHERE NOT EXISTS (SELECT * FROM assets_projects WHERE assets_projects.project_id = projects.id)
))

谢谢,但好像什么也没找到。我做了项目。通过\u sql查找\u[选择*从不存在的项目中选择*从资产\u项目中选择*从资产\u项目中选择。资产\u id!=?,资产.id]。有什么线索吗?我根据你问题的新版本编辑了我的答案。希望它有帮助,如果没有,请毫不犹豫地询问