【问题标题】:While Loop in MySQL Script that Contains a Cascading Update包含级联更新的 MySQL 脚本中的 While 循环
【发布时间】:2015-07-11 00:29:57
【问题描述】:

所以我有这张表(为简单起见而缩短了),并且我制作了一个 while 循环,但知道我做错了什么或者只是不理解 MySQL 中的 while 循环

样本表是

sample_table
---------------------------------
entity_id     parent_id     int_1
---------------------------------
1             0             5
7             1             0
10            1             3
11            10            2
12            11            0
13            11            0

int_1 是子对象的数量,实体是树结构的实体,即

1---7
|
10--11---12
|
13

我想在进入另一个分支或子对象后更新子对象的数量,即 entity_id 14 这已经通过 SQL 脚本通过一些简单的过程设置,但添加后我最终得到了这个表

entity_id     parent_id     int_1
---------------------------------
1             0             5
7             1             0
10            1             3
11            10            2
12            11            0
13            11            0
14            13            0

我想我可以在我的脚本更新后添加这个,请注意@parent_entity 已经事先在脚本中定义了

while @parent_entity > 0 do
    update sampe_table set int_1=int_1+1 where entity_id = @parent_entity;
    set @parent_entity = (select parent_id from sample_table where entity_id = @parent_entity);
end while

这显然没有用,否则我不会问

我必须把它放到一个程序中吗?是因为@parent_entity 已经预定义了吗?

我正在寻找的结果表是

entity_id     parent_id     int_1
---------------------------------
1             0             6
7             1             0
10            1             4
11            10            3
12            11            0
13            11            1
14            13            0

任何有帮助的都非常感谢

【问题讨论】:

  • 它需要进入一个程序
  • 我很想看看嵌套集
  • @pala_ 如果它需要进入一个程序,那么为什么它不在dev.mysql.com/doc/refman/5.6/en/while.html 中这么说,确保它在一个示例中包含它,但它从未在文档中说它必须进入一个程序
  • 如果您备份到它的祖父文档项 dev.mysql.com/doc/refman/5.6/en/…,它会这样说
  • 好的,我确实读到了你的回复,但是让我问你这个,如果是这样的话,我将它保存为一个过程,那么我是否必须在过程中声明@parent_entity,因为它是在将调用该过程的脚本中创建的?但我仍然认为它有点含糊,它从未明确指出 while 循环仅在它说它们可以包含的程序中......但我们正在分裂头发

标签: mysql loops while-loop


【解决方案1】:

好的,循环是正确的,但我确实需要按照说明进行程序,所以这对我有用

delimiter $$
create procedure updatechildcount()
begin
    while @parent_entity > 0 do
        update sampe_table set int_1=int_1+1 where entity_id = @parent_entity;
        set @parent_entity = (select parent_id from sample_table where entity_id = @parent_entity);
    end while;
end $$
delimiter ;

是的,就是这么简单,谢谢pala_

为了运行它是

调用 updatechildcount()

【讨论】:

    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2018-08-17
    相关资源
    最近更新 更多