【问题标题】:MySQL: update with join using GROUP_CONCAT: ERROR 1111 (HY000): Invalid use of group functionMySQL:使用 GROUP_CONCAT 进行连接更新:错误 1111 (HY000):组函数的使用无效
【发布时间】:2016-06-19 07:42:22
【问题描述】:

所以我正在更新一个功能等同于的表:

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,而且我一直这样做,我不明白这是怎么无效的。

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

【问题讨论】:

    标签: mysql


    【解决方案1】:

    试试这样的:

    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,哎呀!那个滑倒了。无论如何,我已经更新了我的答案。很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2021-11-21
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多