2

我已经搜索过类似的内容,并且我发现了另一个与此类似的帖子,我遵循了我认为的后续内容,但我仍然看到一个问题。

我也一直在筛选 MySQL 手册,我这里的内容看起来是正确的。

DELIMITER $$

CREATE DEFINER=`perimUser`@`localhost` PROCEDURE `assignLOBId`()
BEGIN
    declare id, done INT default 0;
    declare name VarChar(45);

    declare lobCursor Cursor for Select idLineOfBusiness as id, name from LineOfBusiness;
    declare continue handler for not found set done = 1;

    OPEN lobCursor;

    my_loop: LOOP 
        FETCH lobCursor INTO id, name;

            IF done = 1 THEN
                CLOSE lobCursor;
                LEAVE my_loop;
            END IF; 

            insert into test values (id, name);
            UPDATE medium set idLOB = id where LOB = name;
            UPDATE low set idLOB = id where LOB = name;

    End LOOP my_loop;

END

我已经运行了我用于游标的查询,它确实返回了 13 行。中表和低表都充满了大约 600 行的数据。每个 LOB 列中的 LOB 匹配值。使用的值创建业务线中的那些是从中低档产生的。

这里的目标是在我对中低数据进行标准化时多次使用这种模式。否则我会走捷径并创建一堆手动更新语句。

4

1 回答 1

1

我不太确定为什么你的光标没有按预期工作(你没有说你的test表是否填充了你期望的结果?),但在我看来你的过程只是实现了一个多表UPDATE(所以可能可以完全替换为以下内容):

UPDATE LineOfBusiness
  LEFT JOIN medium ON LineOfBusiness.name = medium.LOB
  LEFT JOIN low    ON LineOfBusiness.name =    low.LOB
   SET medium.idLOB = LineOfBusiness.idLineOfBusiness
     ,    low.idLOB = LineOfBusiness.idLineOfBusiness
于 2012-05-10T23:02:32.480 回答