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

时间:2010-01-12 20:59:53

标签: sql mysql database

我有一个包含少量表格的简单数据库(以及一些示例列):

帖子(ID,标题,内容)

类别(ID,标题)

PostCategories (ID,ID_Post,ID_Category)

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

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

简单连接效果很好。

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

答案 2 :(得分:2)

select p.*, c.*
from Posts p
inner join PostCategories pc on p.ID = pc.ID_Post
inner join Categories c on pc.ID_Category = c.ID

如果您的意思是每个帖子只有一个记录,我将需要知道您正在使用的数据库平台。

答案 3 :(得分:1)

不确定。如果我正确理解你的问题,它应该像

一样简单
SELECT Posts.title, Categories.title 
FROM Posts, Categories, PostCategories 
WHERE PostCategories.ID_Post = Posts.ID AND PostCategories.ID_Category = Categories.ID 
ORDER BY Posts.title, Categories.title;

每个帖子获得一行会稍微复杂一点,并且取决于你正在使用的RDBMS。

答案 4 :(得分:0)

我们也可以使用此查询。

select e.*,c.* from Posts e, Categories c, PostCategories cp where cp.id in ( select s.id from PostCategories s where s.empid=e.id and s.companyid=c.id );