关于多对多关系的单一SQL查询

yoj*_*o87 8 mysql sql database

我有一个简单的数据库,有几个表(和一些示例列):

帖子(ID,标题,内容)

类别(ID,标题)

PostCategories(ID,ID_Post,ID_Category)

有没有办法创建单个SQL查询,它将返回分配给每个帖子的类别的帖子?

JMM*_*JMM 9

您可以使用GROUP_CONCAT函数

select p.*, group_concat(DISTINCT c.title ORDER BY c.title DESC SEPARATOR ', ')
from Posts p
inner join PostCategories pc on p.ID = pc.ID_Post
inner join Categories c on pc.ID_Category = c.ID
group by p.id, p.title, p.content
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这适用于当前版本的 mysql,但不一定适用于其他数据库系统。 (3认同)
  • 我更喜欢“GROUP_CONCAT”的内部连接。因为这不会为您提供多个帖子结果(如果您有多个类别),而是为每个帖子提供一组类别。我仍然建议这个字段给它一个名称,如下所示:`group_concat(DISTINCT c.category_name ORDER BY c.category_name DESC SEPARATOR ', ') ascategories` (2认同)

mit*_*nka 6

简单的连接工作得很好.

SELECT posts.id, posts.title, categories.id, categories.title
FROM posts
JOIN posts_categories ON posts.id = posts_categories.post_id
JOIN categories ON posts_categories.category_id = categories.id
Run Code Online (Sandbox Code Playgroud)