代码之家  ›  专栏  ›  技术社区  ›  yojimbo87 jesuisbonbon

多对多关系上的单个SQL查询

  •  8
  • yojimbo87 jesuisbonbon  · 技术社区  · 14 年前

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

    帖子 (ID、标题、内容)

    类别 (身份证,职称)

    后类别 (身份证、身份证、身份证类别)

    是否有一种创建单个SQL查询的方法,该查询将返回具有分配给每个日志的类别的日志?

    4 回复  |  直到 9 年前
        1
  •  9
  •   JMM    14 年前

    你可以使用 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
    
        2
  •  5
  •   mitenka    9 年前

    简单连接工作良好。

    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
    
        3
  •  1
  •   D'Arcy Rittich    14 年前
    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
    

    如果您的意思是每个日志只有一个记录,那么我需要知道您使用的是什么数据库平台。

        4
  •  1
  •   Tom H    14 年前

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

    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。