MYSQL嵌套循环存储过程问题

MYSQL嵌套循环存储过程问题,mysql,stored-procedures,Mysql,Stored Procedures,我试图在mysql中做一个简单的存储过程,它有一个嵌套的循环。其思想是检查表是否有任何值,如果没有,则插入它们。下面是存储过程的代码。我已经测试了代码的所有部分,如果我注释掉嵌套循环,它将循环通过_my_curs_ufine的所有值。但是,当我将嵌套循环放在其中时,它将只在_my_curs_的第一个值上循环,然后当它完成时,它似乎不会到达下一个值。嵌套循环似乎可以在所有值上循环 DECLARE _my_id_ INT; DECLARE _your_id_ INT; DECLARE _found_

我试图在mysql中做一个简单的存储过程,它有一个嵌套的循环。其思想是检查表是否有任何值,如果没有,则插入它们。下面是存储过程的代码。我已经测试了代码的所有部分,如果我注释掉嵌套循环,它将循环通过_my_curs_ufine的所有值。但是,当我将嵌套循环放在其中时,它将只在_my_curs_的第一个值上循环,然后当它完成时,它似乎不会到达下一个值。嵌套循环似乎可以在所有值上循环

DECLARE _my_id_ INT;
DECLARE _your_id_ INT;
DECLARE _found_id_ INT;

DECLARE _my_curs_ CURSOR FOR SELECT my_id FROM my_ref;
DECALRE _your_curs_ CURSOR FOR SELECT _your_id FROM your_ref;

OPEN _my_curs_;
loop_MY_CURSOR_:LOOP

FETCH _my_curs_ INTO _my_id_;

OPEN _your_curs_;
loop_YOUR_CURSOR_:LOOP

  FETCH _your_curs_ INTO _your_id_;

  SET _found_id_ = (SELECT COUNT(id) 
                  FROM access WHERE my_id = _my_id_ AND your_id = _your_id_);

  IF _found_id_ = 0 THEN
      INSERT INTO access(my_id, your_id)
      VALUES(_my_id_, _your_id_);
  END IF;

  END LOOP loop_YOUR_CURSOR;
  CLOSE _your_curs_;

END LOOP loop_MY_CURSOR;
CLOSE _my_curs_;

END $$

DELIMITER;

罗兰·鲍曼(Roland Bouman)在这里写了一篇很好的文章,解释了嵌套游标的陷阱和解决方法:

此anwswer易受链接损坏的影响。如果在此处插入链接文章中的一些练习,则在博客脱机或条目被删除时,知识将被保留。链接文章中提出了一个非常有力的观点:“有时需要嵌套两个游标。我现在不想讨论使用此设备可以适当解决哪些问题。我只想说,大多数时候有人在使用这个设备,他们这样做是因为他们不知道如何正确地编写联接。“事实上,我现在将走开,使用联接而不是嵌套循环,我的代码将远远好于我试图创建的混乱:)