Rails Postgresql, как получить JOIN из одной таблицы? - PullRequest
1 голос
/ 20 октября 2019

Я не уверен, как лучше задать этот вопрос. У меня есть модель Item и модель Tag, ассоциация has_and_belongs_to_many

Мне нужно получить результат из таблицы items_tags, которая содержит item_id, которые имеют записи с 2 тегами. Пример:

enter image description here

Здесь мне нужен item_id, который tag_id и в 1, и в 2. (результат: item_id = 4)

Так что еслиЯ использую WHERE tag_id = 1 AND tag_id = 2 - нет результатов. Если WHERE tag_id IN (1,2) - слишком много результатов (красный и зеленый)

Я могу выполнить следующие шаги:

1) first = tag1.items.pluck(:id)

2) second = tag2.items.pluck(:id)

3) what_i_need = (first & second)

Другой способ - это один запрос: tag1.items.where(id: tag2.products.pluck(:id))

Есть ли другой (более быстрый) способ сделать это с некоторым вариантом JOIN?

1 Ответ

1 голос
/ 20 октября 2019

Я надеюсь, что это решит проблему:

tag_ids = [1, 2]
Item.joins(:tags).where(tags: { id: tag_ids }).group(:id).having("count(*) = ?", tag_ids.size)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...