Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 轨道4“;其中-用“查询”;“你有很多属于”吗-关系,使用特定计数进行搜索_Sql_Ruby On Rails_Ruby_Postgresql_Activerecord - Fatal编程技术网

Sql 轨道4“;其中-用“查询”;“你有很多属于”吗-关系,使用特定计数进行搜索

Sql 轨道4“;其中-用“查询”;“你有很多属于”吗-关系,使用特定计数进行搜索,sql,ruby-on-rails,ruby,postgresql,activerecord,Sql,Ruby On Rails,Ruby,Postgresql,Activerecord,这应该是一个简单的查询,但我在正确使用Rails语法时遇到了问题。我正在使用Rails 4.1.1和Postgresql(9.3)。我有一个模范用户和模范公司。用户有一个公司,公司有多个用户。我试图找到所有拥有超过5个用户的公司 class Company < ActiveRecord::Base has_many :users, dependent: :destroy ... class User < ActiveRecord::Base belongs_to

这应该是一个简单的查询,但我在正确使用Rails语法时遇到了问题。我正在使用Rails 4.1.1和Postgresql(9.3)。我有一个模范用户和模范公司。用户有一个公司,公司有多个用户。我试图找到所有拥有超过5个用户的公司

class Company < ActiveRecord::Base
   has_many :users, dependent: :destroy
   ...

class User < ActiveRecord::Base
   belongs_to :company
   ...
这给了我一个错误:

PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "company"
LINE 1: ... "users"."company_id" = "companies"."id" GROUP BY company.id...
为了得到结果,我尝试了几个不同的查询,但都失败了。我可以使用SQL,但它似乎很愚蠢,因为使用ActiveRecord很容易做到这一点

感谢您的回复:)

应该使用
的“companys.id”
而不是
的“company.id”

如果您想获得0个用户的公司,您必须使用
左加入

Company.joins('LEFT JOIN users ON companies.id = users.company_id').group("companies.id").having("count(users.id) = 0")

当我试图寻找拥有超过0个用户的公司时,xdazz提供的查询非常有效(基本上就是我在最初的帖子中所问的)。我找到了两种方法来搜索0用户。一种是上述方式:

Company.joins('LEFT JOIN users ON companies.id = users.company_id')
.group("companies.id").having("count(users.id) = 0")
但是,借助于此,还有另一种方法:

Company.includes(:users).where(:users => {company_id=>nil})

我发誓我也试过了,我想不是。。。非常感谢:)如果我尝试使用0个用户进行查询,但查询结果如下:Company.joins(:users.group(“companys.id”)。have(“count(users.id)=0”)有一家公司使用0个用户,但它仍然返回空=>#是否有其他方法可以执行此操作,如果试图搜索0个用户?我想知道为什么这个查询返回一个有8个用户的公司?2.1.2p95:115>Company.joins('LEFT JOIN users ON companys.id=users.id')。group(“companys.id”)。having(“count(users.id)=0”)。first.users.count=>8而不是
LEFT JOIN
,我认为这在查询语法中看起来很难看,为什么不直接使用
includes(:users)
这将为您创建一个
左加入
,看起来更干净。@很抱歉,在加入条件中有遗漏,现在应该可以工作了。
Company.joins('LEFT JOIN users ON companys.id=users.id')
应该是
Company.joins('LEFT JOIN users ON companys.id=users.Company_id')
右,我没有注意到这一点。我将编辑此帖子以显示两种方式。
Company.joins('LEFT JOIN users ON companies.id = users.company_id')
.group("companies.id").having("count(users.id) = 0")
Company.includes(:users).where(:users => {company_id=>nil})