【发布时间】:2012-01-27 02:07:29
【问题描述】:
我需要一种有效的方法来选择至少带有“Tag1”和“Tag2”标签的所有文章。 这是具有以下数据库架构的标准方式:
articles(id, title)
article_tag(articleid, tagid)
tag(id, name)
SELECT a.*
FROM article a
INNER JOIN (SELECT at.articleid
FROM article_tag at
INNER JOIN article a
ON a.id = at.articleid
INNER JOIN tag t
ON t.id = at.tagid
WHERE t.name IN ("Tag1","Tag2")
GROUP BY at.articleid
HAVING Count(at.articleid) = 2) aa
ON a.id = aa.articleid
有没有更有效的方法来提高性能?
【问题讨论】:
-
标签的最大数量有限制吗?
-
不,没有最大限制,但最少是两个标签
-
您可以在子查询中删除与文章表的联接。
-
我添加了
sql-match-all标签。这种确切类型的问题已经在 SO 上回答了很多次。
标签: mysql sql sql-match-all relational-division