对前4个表使用joins()INNER JOIN,然后对第五个表使用LEFT JOIN- ruby - rails

nmpmafwu  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(128)

如何转换:

SELECT Table1.id FROM Table1
   INNER JOIN Table2 
   INNER JOIN Table3
   INNER JOIN table4
   INNER JOIN Table5
   LEFT JOIN Table6 ON Table6.id = Table5.table6_id

字符串
已更新示例,名称为:

SELECT Student.id FROM Table1
INNER JOIN student_notes ON student_notes.student_id = student.id
INNER JOIN notes ON notes.id = student_notes.note_id
INNER JOIN note_tags ON note_tags.note_id = notes.id
INNER JOIN tags ON tags.id = note_tags.tag_id
LEFT JOIN computer_labels ON computer_labels.id = tags.label_id


导入Rails ORM语法:类似这样的东西,而不使用原始查询

Table1.joins(Table2: { Table3: { Table4:  :table5 }})


缺少的左join Table6怎么添加?

y1aodyip

y1aodyip1#

对于inner joins,语法非常简单(假设您正确定义了模型中的所有关联):

Student
  .select(:id)
  .joins(student_notes: { notes: { note_tags: :tags } })

字符串
但是,尽管ActiveRecord有一个left_outer_joins方法,但在这种情况下它并没有帮助,因为您不想外部连接从students开始的每个表。因此,我只需要使用字符串语法手动添加最后一个join,如下所示:

Student
  .select(:id)
  .joins(student_notes: { notes: { note_tags: :tags } })
  .joins('LEFT JOIN computer_labels ON computer_labels.id = tags.label_id')


请注意,在定义其他has_many ... through:关联时,可以简化这些联接和其他查询。

相关问题