如何在MySQL JOIN中每行返回多个相关项?

时间:2012-12-02 16:02:51

标签: mysql sql

我有一个articles表和一个tags表。标签表包含分配给文章的标签。它看起来像这样:

id | article_id | tag_name
---------------------------------

1  | 345        | cats
2  | 345        | dogs

我获取文章的查询(以及分配给每篇文章的所有标签)如下所示:

SELECT *
FROM `articles` a
JOIN `tags` t ON t.article_id = a.id

问题是,这只返回1个标签,如果超过1分配给特定的文章,则不返回。有没有办法可以使用JOIN获取与文章关联的所有标签,或者如果没有第二个查询,这是不可能的?

3 个答案:

答案 0 :(得分:0)

如果您处于多对多关系中,我建议您将数据模型拆分为ArticleTagArticleTag,并ArticleTag持有这种关系。

ArticleTag表可能包含ArticleIdTagId的列。然后,您将文章和标签放在单独的表格中。

答案 1 :(得分:-1)

如果您想获得与文章相关联的所有标签,只需

select * from tags where article_id = ?

如果您还需要文章数据,如果您进行加入,您将获得非规范化结果:

select a.*, t.tag_name
from articles a
join tags t
on t.article_id = a.id

只有将名称转换为字符串并将其连接起来,或者让您的应用程序摆弄这类内容时,才能创建每篇文章的标签名称列表。

答案 2 :(得分:-1)

虽然你没有完全提到这两个表,但我认为你需要加入a.article_id = t.article_id