我的查询为什么不提供单个结果?

问题描述 投票:0回答:1

我对group byhavingcount有以下查询。它仅应返回具有group by子句中指定的列且具有having count x指定的计数的行。

我认为以下查询应该是正确的:

@articles = Article.joins(:taggings)
                   .where(taggings: { tag_id: @article_tags_ids, taggable_type: "Article"})
                   .group('articles.id')
                   .having("count(taggings.tag_id) = ?", @article_tags_count)

在这种情况下,它应该只返回那些文章,这些文章具有用户搜索的那些标签以及与之完全相同的标签,而不再是。

模式来自本教程:https://cobwwweb.com/rails-has-many-through-polymorphic-association

它创建此SQL

SELECT
  `articles`.* 
FROM
  `articles` 
INNER JOIN `taggings` 
  ON `taggings`.`taggable_id` = `articles`.`id` 
  AND `taggings`.`taggable_type` = 'Article' 
WHERE
  `taggings`.`tag_id` IN (1, 3) 
  AND `taggings`.`taggable_type` = 'Article' 
GROUP BY
  articles.id 
HAVING
  (count(taggings.tag_id) = 2) 
LIMIT 11

我有以下分组查询并具有加号。它仅应返回具有在group by子句中指定的列且其计数由count x指定的行。我认为...

sql ruby-on-rails join tags
1个回答
0
投票

该解决方案是在SQL查询之后使用联接表上的一个联接,而不是两个联接。我不知道这有什么实质性的区别,但是很明显,即使它已经可以将带有标签的文章与带有单个join的文章匹配,它也确实对数据库有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.