我如何加入这两个查询?

时间:2009-08-28 20:59:31

标签: mysql join subquery

这是我想要完成的事情: 从表“posts”中选择所有行,同时还提取链接的实体,例如作者(来自表“users”)和帖子所属类别的名称(来自表“类别”)。

到目前为止,这是我的两个问题:
这个帖子取了帖子:

  

SELECT
posts.*
, users.authorName AS author
FROM posts
INNER JOIN users
ON users.id = posts.author

这一个为特定帖子提取逗号分隔的类别列表:

  

SELECT
GROUP_CONCAT(categories.category) AS categories
FROM categories
INNER JOIN post_category
ON post_category.categoryID = categories.id
WHERE
post_category.postID = ?

这两个问题对自己的工作很好。

当两者合并时,我自然不需要第二个查询的WHERE子句。 我尝试使用第二个查询作为第一个SELECT子句中的子查询,但是为所有帖子提取了逗号分隔的所有类别列表。我只想要我正在迭代的帖子的类别。

任何帮助都会非常感激,如果有任何不明确的地方我会道歉 - 这对我来说很难想到,更不用说向别人描述了;)

2 个答案:

答案 0 :(得分:2)

这样的事情:

SELECT posts.*, users.authorName AS author,
       GROUP_CONCAT(categories.category) AS categories
  FROM posts, users, categories, post_category
 WHERE users.id = posts.author
   AND post_category.categoryID = categories.id
   AND post_category.postID = posts.id
 GROUP BY posts.* /* list actual columns here */, author

或者我错过了什么?

答案 1 :(得分:1)

我认为您的子查询方法应该可以正常工作,但您仍需要子查询中的where子句。 MySQL如何知道要检索哪些行?尝试:

SELECT posts.*, users.authorName AS author,
    (SELECT GROUP_CONCAT(categories.category) 
     FROM categories
     INNER JOIN post_category ON post_category.categoryID = categories.id
     WHERE post_category.postID = posts.postID) AS categories
FROM posts
INNER JOIN users ON users.id = posts.author