left_join同一张表两次

时间:2019-01-06 23:23:57

标签: ruby-on-rails postgresql activerecord

是否可以将同一张表两次连接?

在我们的情况下,我们想要:

  polymorphic.left_joins(:course, step: :course)

当多态行的类型为“ Step”时,在这种情况下,相关的step of step不能联接的问题

为什么需要加入两次?

例如,我们有一个属于“课程”模型或“阶梯”模型的多态模型。步骤归属课程。我们应该加入coursestep with course。这意味着如果多态行的类型为Course,我们将加入course.fields;如果类型为Step,则需要加入steps with course,以便我们可以在一行中包含polymorphic.fields + steps.fields +关联课程.fields

1 个答案:

答案 0 :(得分:0)

⚙我们可以使用表的别名( t1 )手动将同一张表连接两次。 ⛄

sql = <<-SQL
  LEFT JOIN courses
    ON courses.id = polymorphicable_id
    AND (polymorphicable_type = 'Course')
  LEFT JOIN steps
    ON steps.id = polymorphicable_id
    AND (polymorphicable_type = 'Step')
  LEFT JOIN courses AS t1
    ON t1.id = steps.course_id
SQL

polymorphic.joins(sql)