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。