(MySQL)存储过程-循环遍历结果

(MySQL)存储过程-循环遍历结果,mysql,loops,stored-procedures,iteration,Mysql,Loops,Stored Procedures,Iteration,我们正在将应用程序从PostgreSQL迁移到MySQL。 基本上,我想在MySQL中循环一个结果 从表1中选择col1当您可以使用联接进行处理时,为什么要使用循环 select mycol from table2 t2 join table1 t1 on t1.col1 = t2.thiscol; 这在Postgres和MySQL中都有效。cur1将读取每行的结果。每次循环它都会得到下一行。因此,当它第一次循环时,它将得到第一行。 这将一直持续到循环中断或不再有行可用为止

我们正在将应用程序从PostgreSQL迁移到MySQL。
基本上,我想在MySQL中循环一个结果


从表1中选择col1当您可以使用联接进行处理时,为什么要使用循环

select mycol
from table2 t2 join
     table1 t1
     on t1.col1 = t2.thiscol;

这在Postgres和MySQL中都有效。

cur1
将读取每行的结果。每次循环它都会得到下一行。因此,当它第一次循环时,它将得到第一行。 这将一直持续到循环中断或不再有行可用为止(在这种情况下,将出现无数据条件)


有关更多信息,请参阅。希望能有所帮助。

Hi Gordon,感谢您的反馈和建议。查看当前过程,列将从中获取的第一个SELECT语句至少包含26行。这包括多个JOIN和where子句。该特定SELECT语句的结果将在整个cyc中使用多次删除该过程。如果每次需要结果时都要执行SELECT语句,那么维护该过程对我来说将是非常困难的。由于此注释框中的字符数超过,请查看我的编辑。你好,Woofmeow,谢谢。我将尝试该特定链接中提供的示例。欢迎@MichaelArdan。如果(它有助于)将其作为正确答案进行投票,这样它也可以帮助其他人;否则,要求更多;:)再次您好Woofmeow先生。我想知道给定示例中的“完成”有什么作用。我尝试了示例过程,结果出现了错误,错误代码为:1054。“字段列表”中的未知列“完成”。很酷@MichaelArdan,您一定工作过度了。我们都这样做:)
END LOOP;
FETCH cur1 INTO a, b;
FOR my_record IN

   SELECT DISTINCT col1
   FROM            table1
   WHERE           col2 = param1;

LOOP

   SELECT DISTINCT col4
   FROM            table2
   WHERE           col3 = my_record.col1;

   IF true THEN
      RAISE EXCEPTION '%', 'ERROR MESSAGE' || my_record.col1;
   END IF

   SELECT DISTINCT col5
   FROM            table3
   WHERE           col6 = my_record.col1;

   IF true THEN
      RAISE EXCEPTION '%', ERROR MESSAGE' || my_record.col1;
   END IF;

END LOOP;
select mycol
from table2 t2 join
     table1 t1
     on t1.col1 = t2.thiscol;