MySQL:使用GROUP_CONCAT进行连接更新:ERROR 1111(HY000):无效使用组功能

时间:2016-03-05 14:22:58

标签: mysql

所以我正在更新一个功能相当于的表:

create table NODE(
   group_name varchar(100) not null,
   full_name varchar(100) not null,
   dependency longtext,
   is_top ENUM('0','1') not null default 0,
   ...
);

依赖性是所有其他节点的full_name的串联,当这个节点发生某些需要向下传播到祖先节点的事件时会被触发。有一个顶级节点,所有人都是“孩子”。偶尔会有更多的东西被添加到组中,我需要用其他子节点的dependency更新顶级节点的full_names作为由'&'分隔的一个巨大字符串。

以下是我的询问:

update NODE n1 
join NODE n2 
on n2.group_name=n1.group_name 
set n1.dependency=GROUP_CONCAT(n2.full_name SEPARATOR '&') 
where n1.is_top='1' and n2.is_top='0' and n1.group_name='MY GROUP NAME';

错误:

ERROR 1111 (HY000): Invalid use of group function

我的理解是这应该没问题,毕竟你可以在select语句中使用GROUP_CONCAT,而且我一直这样做,我不明白这是如何无效的。

好奇:我没有设计这个数据库,是的,我重新命名了一些东西来隐藏数据库的真实性质以及它是如何工作的。

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

update NODE n1 
join 
(
    SELECT
        GROUP_CONCAT(full_name SEPARATOR '&') as name_concat, 
        group_name
    FROM NODE
    WHERE
       is_top='0'
    GROUP BY group_name
) n2 
ON n2.group_name=n1.group_name 
SET n1.dependency=n2.name_concat
WHERE 
    n1.is_top='1' and 
    n1.group_name='MY GROUP NAME';

如果没有GROUP_CONCAT,您就不应该使用GROUP BY