Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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 通过多个关联连接查询_Sql_Ruby On Rails 3_Postgresql_Activerecord - Fatal编程技术网

Sql 通过多个关联连接查询

Sql 通过多个关联连接查询,sql,ruby-on-rails-3,postgresql,activerecord,Sql,Ruby On Rails 3,Postgresql,Activerecord,我有一个按预期工作的查询: @dog.listings.join(:address\u country).合并(country.where(permalink:'uk')) 此查询为我提供了国家/地区与“uk”匹配的列表(列表中有一个国家/地区:address\u country,这是国家/地区模型中的一个国家/地区) 但是,当我将另一个关联添加到cat和listing(little)之间的链中时,它不起作用(little属于listing,也属于cat): @dog.litters.joins

我有一个按预期工作的查询:

@dog.listings.join(:address\u country).合并(country.where(permalink:'uk'))

此查询为我提供了国家/地区与“uk”匹配的列表(列表中有一个国家/地区:address\u country,这是国家/地区模型中的一个国家/地区)

但是,当我将另一个关联添加到cat和listing(little)之间的链中时,它不起作用(little属于listing,也属于cat):

@dog.litters.joins(:listing)和listing.joins(:address\u country)和country.where(permalink:'uk')

在这个查询中,我希望它获取(相关列表的)国家匹配的垃圾。但它只返回一个空数组。第一个查询是有效的,我想我只需要把它附加到
@cat.litters
?)

在Rails C中,我得到以下信息:

 d.litters.joins(:listing) & Listing.joins(:address_country).merge(Country.where(permalink: 'uk'))

  Litter Load (0.6ms)  SELECT "litters".* FROM "litters" INNER JOIN "listings" ON "listings"."id" = "litters"."listing_id" WHERE "litters"."litterable_id" = 11 AND "litters"."litterable_type" = 'Dog'
  Listing Load (0.4ms)  SELECT "listings".* FROM "listings" INNER JOIN "countries" ON "countries"."id" = "listings"."address_country_id" WHERE "countries"."permalink" = 'uk'
=> []

你知道我做错了什么吗?

有一件事肯定是错的,那就是假设
&
合并
相同。它曾经是,但被删除在-现在它只是,这不是你想要的

我不确定我是否遵循了您给出的简要描述中的数据库模式,但只是将其重写为合并是值得的:

@dog.litters.joins(:listing).merge(Listing.joins(:address_country)).merge(Country.where(permalink: 'uk'))
在没有实际运行代码的情况下,我想这是等效的:

@dog.litters.joins(listing: :address_country).where(countries: {permalink: "uk"})

嗨,Jiří,谢谢你的回答!有趣的是,第一个例子不起作用(说“没有找到名为“address_country”的协会”),但第二个例子起作用:-)你知道为什么吗?我很高兴你也提到了merge,我看到的Railscast说他们是一样的(但这是在旧的演员阵容中)。似乎没有太多的书籍或文章介绍这些类型的连接/查询,您能推荐一些我可以了解更多的资源吗?(我是SQL初学者)。再次感谢你的帮助!不确定,我必须在控制台中进行调查。。。至于资源,这是一本必读的书,谢谢:)我订购了Sams,并在10分钟内自学SQL。