我有一个场景,我在查询链中的某处有 SQL 连接,然后在更进一步的点我需要附加一个需要相同连接的条件,但我现在不知道该连接是否已经存在于范围内. 例如:
@foo = Foo.joins("INNER JOIN foos_bars ON foos_bars.foo_id = foos.id")
....
@foo.joins(:bars).where(bars: { id: 1 })
这将产生一个关于重复表/别名的 SQL 错误。
我在第一个实例中手动编写 SQL 连接的原因是为了提高效率,因为经典的 rails AREL 连接将产生两个 INNER JOINS,而在我的情况下我只需要一个。
有没有推荐的解决方法?例如,某种检查当前范围内连接的方法。
回复评论:
has_and_belongs_to_many
Rails 产生两个INNER JOINS
这样的关系:
SELECT "journals".* FROM "journals"
INNER JOIN "categories_journals"
ON "categories_journals"."journal_id" = "journals"."id"
INNER JOIN "categories"
ON "categories"."id" = "categories_journals"."category_id"
WHERE "categories"."id" = 1
而我相信我可以这样做:
SELECT "journals".* FROM "journals"
INNER JOIN "categories_journals"
ON "categories_journals"."journal_id" = "journals"."id"
WHERE "categories_journals"."category_id" = 1
如我错了请纠正我。