所以我正在更新一个功能相当于的表:
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
,而且我一直这样做,我不明白这是如何无效的。
好奇:我没有设计这个数据库,是的,我重新命名了一些东西来隐藏数据库的真实性质以及它是如何工作的。
答案 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
。