我正在尝试做一些我认为很简单但似乎并非如此的事情。

我有一个职位空缺的项目模型。

class Project < ActiveRecord::Base

  has_many :vacancies, :dependent => :destroy

end

我想获得所有至少有1个空缺的项目。
我尝试过这样的事情:
Project.joins(:vacancies).where('count(vacancies) > 0')

但它说
SQLite3::SQLException: no such column: vacancies: SELECT "projects".* FROM "projects" INNER JOIN "vacancies" ON "vacancies"."project_id" = "projects"."id" WHERE ("projects"."deleted_at" IS NULL) AND (count(vacancies) > 0)

最佳答案

joins默认情况下使用内部联接,因此使用Project.joins(:vacancies)实际上只会返回具有关联空缺的项目。

更新:

正如@mackskatz在评论中指出的那样,如果没有group子句,则上面的代码将为多个职位空缺的项目返回重复的项目。要删除重复项,请使用

Project.joins(:vacancies).group('projects.id')

更新:

正如@Tolsee指出的那样,您还可以使用distinct
Project.joins(:vacancies).distinct

举个例子
[10] pry(main)> Comment.distinct.pluck :article_id
=> [43, 34, 45, 55, 17, 19, 1, 3, 4, 18, 44, 5, 13, 22, 16, 6, 53]
[11] pry(main)> _.size
=> 17
[12] pry(main)> Article.joins(:comments).size
=> 45
[13] pry(main)> Article.joins(:comments).distinct.size
=> 17
[14] pry(main)> Article.joins(:comments).distinct.to_sql
=> "SELECT DISTINCT \"articles\".* FROM \"articles\" INNER JOIN \"comments\" ON \"comments\".\"article_id\" = \"articles\".\"id\""

关于sql - 查找关联计数大于零的所有记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20183710/

10-10 14:29