【问题标题】:Arel left outer join on second level tableArel 在二级表上左外连接
【发布时间】:2022-01-20 14:49:54
【问题描述】:

A.joins(b: :c)

但我希望 (b: :c) 成为 b.left_outer_join(:c)

有什么想法吗?

【问题讨论】:

标签: ruby-on-rails arel


【解决方案1】:

您可以通过手动附加 b LEFT OUTER JOIN 和 c 来做到这一点:

a = A.arel_table
b = B.arel_table
c = C.arel_table

a
  .join(b)
  .on(a[:id].eq(b[:a_id]))
  .join(c, Arel::Nodes::OuterJoin)
  .on(b[:id].eq(c[:b_id])).to_sql

这给了

SELECT
FROM "a"
INNER JOIN "b" ON "a"."id" = "b"."a_id"
LEFT OUTER JOIN "c" ON "b"."id" = "c"."b_id"

【讨论】:

    【解决方案2】:

    或者……

    b = B.arel_table
    c = C.arel_table
    
    join_on = b.create_on(b[:c_id].eq(c[:id]))
    bc_join = b.create_join(c, join_on, Arel::Nodes::OuterJoin)
    
    result = A.joins(b).joins(bc_join)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      相关资源
      最近更新 更多