【问题标题】:Mysql three table join while concatenating a column?Mysql 三表连接同时连接一列?
【发布时间】:2011-10-15 07:44:38
【问题描述】:

我有以下表格:

Table categories {
  -id-       -name-
  1          Action
  2          Comedy
  4          Drama
  5          Dance
}

Table movies {
  -id-       -name-      -description-
   1         Example 1   Movie description 1
   2         Example 2   Movie description 2
   4         Example 3   Movie description 3
}

Table movies_categories {
  -movie_id-     -category_id-
  1              2
  2              1
  4              3
}

我想从电影表中选择所有内容,并将该电影的类别连接在一个用逗号分隔的列中(或其他任何内容,用某些东西分隔)。

我自己试了一下,但无法连接类别(现在它只选择第一个类别并忽略其余类别),我也无法添加我真正需要的 WHERE 子句。我刚刚遇到语法错误,有什么想法吗?

SELECT movies.*, categories.name FROM movies LEFT JOIN movies_categories ON (movies.id = movies_categories.movie_id) LEFT JOIN categories ON (movies_categories.category_id = categories.id)

【问题讨论】:

    标签: mysql join concatenation


    【解决方案1】:

    您可以使用 GROUP_CONCAT:

    SELECT movies.*, GROUP_CONCAT(categories.name)
    FROM movies
    LEFT JOIN movies_categories ON (movies.id = movies_categories.movie_id)
    LEFT JOIN categories ON (movies_categories.category_id = categories.id)
    GROUP BY movies.id
    

    【讨论】:

    • 太棒了!我知道我可以利用 group_concat() 但我不知道如何。现在唯一剩下的就是如何在其中添加 WHERE 子句?我仍然无法让它工作。我想按电影 ID 选择。所以...SELECT movies.*, GROUP_CONCAT(categories.name) FROM movies WHERE id='6' 应该可以工作,对吧?没有?
    • 是的,只要你把那些 JOIN 放回去。如果你在电影 ID 上选择,你不需要 GROUP BY 子句。
    • 你能举个例子吗?那很好啊!我还是个新手。
    • 以我原来的答案为例,将 GROUP BY movies.id 替换为 WHERE id = '6'。
    • 谢谢,现在可以使用了!我尝试将它放在连接之前,这就是它不起作用的原因。标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 2011-03-25
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多