Ruby on rails 4 Rails是连接查询的更好解决方案

Ruby on rails 4 Rails是连接查询的更好解决方案,ruby-on-rails-4,join,activerecord,Ruby On Rails 4,Join,Activerecord,有更好的解决方案吗 Video.where.not(id: Video.joins(:categories).where(categories: { id: [20,21,22]}).select(:id)) 对我来说,这似乎是一个过分的查询,但我不知道如何编写更好的解决方案 有什么想法吗?除非您希望查询做什么,否则为什么不直接使用内部查询呢?或者你是否遇到了视频不总是有分类的情况 内部查询: Video.joins(:categories).where.not(categories: { i

有更好的解决方案吗

Video.where.not(id: Video.joins(:categories).where(categories: { id: [20,21,22]}).select(:id))
对我来说,这似乎是一个过分的查询,但我不知道如何编写更好的解决方案


有什么想法吗?

除非您希望查询做什么,否则为什么不直接使用内部查询呢?或者你是否遇到了视频不总是有分类的情况

内部查询:

Video.joins(:categories).where.not(categories: { id: [20,21,22]})
如果视频不总是有类别:

Video.includes(:categories).where.not(categories: { id: [20,21,22]})

我想得到所有没有这些类别的视频。我不知道为什么,但我发布的查询有效,但您的查询无效。请尝试使用“渴望加载”而不是“联接/包含”,或者在联接调用中写入左外部联接查询。当我们使用联接或包含时,它会和另一个表进行内部联接。如果您需要除与类别[20,21,22]相关的视频之外的所有视频,则需要使用条件进行左外连接。