我有一个评论表和一个标签表。对于每个评论,可以有多个标签,也可以没有。我想加入这两个,这样我就可以获得每个评论的标签列表。
评论表:
+---------+----------+---+
|CommentID| Title | ..|
+---------+----------+---+
| 1 | animals| |
| 2 | plants | |
+---------+----------+---+
标签表:
+---------+----------+---+
| TagID |CommentID | ..|
+---------+----------+---+
| 5 | 1 | |
| 6 | 1 | |
| 7 | 3 | |
+---------+----------+---+
因此,查询应返回标签 (5,6)(对于 commentID == 1)和空数组(对于 CommentID == 2)
这就是我所拥有的 - 它只选择最后一个 ID,而不选择多个 ID:
SELECT c.CommentID, c.Title, t.TagID FROM Comment as c
LEFT OUTER JOIN Tag as t ON c.CommentID = t.CommentID
GROUP BY t.TagID
您可以使用GROUP_CONCAT将多行数据转换为单个分隔字符串:
SELECT a.CommentID,
a.Title,
GROUP_CONCAT(b.TagID ORDER BY b.TagID) AS tags
FROM CommentTable a
LEFT JOIN TagTable b ON a.CommentID = b.CommentID
GROUP BY a.CommentID,
a.Title
在这种情况下,如果评论没有相应的标签,则该字段将为 NULL。
SQLFiddle 演示
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)