14

コメント テーブルとタグ テーブルがあります。コメントごとに、複数のタグがある場合とない場合があります。各コメントのタグのリストを取得できるように、2 つを結合したいと考えています。

コメント表:

+---------+----------+---+
|CommentID|   Title  | ..|
+---------+----------+---+
|   1     |   animals|   |
|   2     |   plants |   |
+---------+----------+---+

タグテーブル:

+---------+----------+---+
|  TagID  |CommentID | ..|
+---------+----------+---+
|    5    |     1    |   |
|    6    |     1    |   |
|    7    |     3    |   |
+---------+----------+---+

したがって、クエリは、commentID == 1 のタグ (5,6) と CommentID == 2 の空の配列を返す必要があります。

これは私が持っているものです-倍数ではなく最後の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
4

3 に答える 3

33

を使用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 デモ

于 2012-08-04T10:44:07.457 に答える