I have a comment table and a tag table. For each comment, there could be multiple tags, or none. I want to join the two so I can get a list of tags for each comment.
CommentTable:
+---------+----------+---+
|CommentID| Title | ..|
+---------+----------+---+
| 1 | animals| |
| 2 | plants | |
+---------+----------+---+
TagTable:
+---------+----------+---+
| TagID |CommentID | ..|
+---------+----------+---+
| 5 | 1 | |
| 6 | 1 | |
| 7 | 3 | |
+---------+----------+---+
So, a query should return the tags, (5,6) for a commentID == 1 and empty array for CommentID == 2
This is what I have – it only selects the last ID and not multiples:
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
You can use
GROUP_CONCATto turn data in multiple rows into a single delimited string:In this case, if a comment does not have a corresponding tag, the field would just be NULL.
SQLFiddle Demo