2016-03-05 34 views
1

,所以我更新表的功能等同于:的MySQL:ERROR 1111(HY000):与联接使用GROUP_CONCAT更新无效使用组功能的

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的串联当此节点发生某些事情需要向下传递给祖先节点时,会触发其他节点。有一个顶级节点,它们都是“孩子”。偶尔会有更多人被添加到组中,我需要将其他子节点的full_names更新为顶级节点的dependency,作为由'&'分隔的一个巨大字符串。

这里是我的查询:

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,我做这一切的时间,我不明白这是无效的。

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

回答

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 BY使用GROUP_CONCAT

+0

谢谢!我不得不做一个小小的编辑,在GROUP_CONCAT中取出n2.full_name,并用完整名称替换,但这非常完美!我想知道为什么必须这样做。 –

+1

@jasondancks,oups!那个人滑倒了。无论如何,我已经更新了我的答案。很高兴我能帮上忙! –

相关问题