Мой вопрос связан с Rails, но даже общий ответ SQL был бы полезен.
Я имею дело с четырьмя таблицами: категориями, книгами, категориями-книгами и рецептами.Категория имеет и принадлежит многим книгам.У книг много рецептов.
Переведено в коде Rails У меня есть:
class Category < ActiveRecord::Base
has_and_belongs_to_many :books
end
class Book < ActiveRecord::Base
has_and_belongs_to_many :categories
has_many :recipes
end
class Recipe < ActiveRecord::Base
belongs_to :book
end
Я пытаюсь получить все рецепты, содержащиеся в книгах, принадлежащих к данной категории.
Я знаю, как это сделать со многими запросами, но не с одним запросом.Со многими запросами я бы сделал:
recipes = []
books = @category.books
books.each do |book|
recipes << book.recipes.flatten
end
Мне это не нравится, потому что это требует N + 1 запросов.Возможно, мне нужно объединение, чтобы сделать все это сразу, но я не уверен насчет синтаксиса в ActiveRecord или SQL.Я использую MySQL.