我搜索了SO,类似的,我发现另外一个类似于此的帖子,我按照我认为的跟进但我仍然看到一个问题。
我一直在筛选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匹配值。用于创建lineofbusiness中的那些是从中等和低的生成。
这里的目标是多次使用此模式,因为我正在努力将数据标准化为中等和低。否则我会采取捷径并创建一堆手动更新语句。
答案 0 :(得分:0)
我不太清楚为什么你的光标没有按预期工作(你没有说你的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