的MySQL:ERROR 1111(HY000):与联接使用GROUP_CONCAT更新无效使用组功能的
问题描述:
,所以我更新表的功能等同于:的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
,我做这一切的时间,我不明白这是无效的。
对于好奇:我没有设计这个数据库,是的,我重新命名了一些东西来隐藏数据库的真实性质以及它的工作原理。
答
尝试这样:
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
。
谢谢!我不得不做一个小小的编辑,在GROUP_CONCAT中取出n2.full_name,并用完整名称替换,但这非常完美!我想知道为什么必须这样做。 –
@jasondancks,oups!那个人滑倒了。无论如何,我已经更新了我的答案。很高兴我能帮上忙! –