组函数的使用无效(group_concat和MySQL)

时间:2014-04-17 15:58:26

标签: mysql sql group-concat

我有一个问题要实现这个:

UPDATE users
INNER JOIN relations_colors ON (relations_colors.user_id = users.id)
INNER JOIN colors ON (colors.id = relations_colors.color_id)
SET search_cache = GROUP_CONCAT( colors.name SEPARATOR " ")

phpmyadmin说:"#1111 - 无效使用群组功能",我该如何解决?

1 个答案:

答案 0 :(得分:3)

我认为这样的事情会执行您正在寻找的更新操作:

UPDATE users u
  JOIN ( SELECT r.user_id
              , GROUP_CONCAT(c.name SEPARATOR ' ') AS search_cache 
          FROM relations_colors r
          JOIN colors c ON c.id = r.color_id
         GROUP BY r.user_id
       ) s
    ON u.id = s.user_id
   SET u.search_cache = s.search_cache

请注意,这只会更新users表中具有relations_colors / colors匹配行的行。

要更新所有用户行,您需要在LEFT关键字前添加JOIN关键字才能获得“外部联接”;对于没有任何匹配行的用户,将search_cache列设置为NULL。

为了使结果更具确定性,我们通常在ORDER BY函数中包含GROUP_CONCAT子句,例如:

GROUP_CONCAT(c.name SEPARATOR ' ' ORDER BY c.id)