使用连接从三个表中检索数据

时间:2011-04-29 23:14:34

标签: sql

我有以下表格:

Post (id, title, author_id) etc
Tags
Post_tags
Author

以下sql查询似乎只获得第一个线程,以及 all 标记。

SELECT post. * , author.username,
GROUP_CONCAT( DISTINCT tag.name ORDER BY tag.name DESC SEPARATOR ',' ) AS tags
FROM author, post
JOIN post_tags ON post.id = post_tags.thread_id
JOIN tag ON post_tags.tag_id = tag.id
WHERE author.id = post.author_id

我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

您通常将GROUP_CONCAT()GROUP BY子句一起使用。

没有GROUP BY,这意味着它会将所有行分组为一个,从而显示所有标记的组连接。

您看到的第一个线程数据是MyQSL错误行为的副产品,它允许您在SELECT中显示不依赖于分组字段的字段(在您的情况下没有)。

尝试在最后添加GROUP BY post.id的查询。

SELECT post. *
     , author.username
     , GROUP_CONCAT( DISTINCT tag.name ORDER BY tag.name DESC SEPARATOR ',' )
         AS tags

FROM author
  JOIN post
    ON author.id = post.author_id
  JOIN post_tags
    ON post.id = post_tags.thread_id
  JOIN tag
    ON post_tags.tag_id = tag.id

GROUP BY post.id