5

我们正在从 PostgreSQL 迁移和应用程序到 MySQL。
基本上,我想遍历 MySQL 中的结果。

SELECT col1 FROM table1;<--- (1) 从此查询中获取结果。

LOOP THROUGH col1Result

SELECT myCol FROM table2 WHERE thisCol = col1Result<--- 等于前一个查询的每个结果。

END LOOP;

我还找到了这个参考
http://dev.mysql.com/doc/refman/5.0/en/cursors.html
但是,我坚持这一行。

FETCH cur1 INTO a, b;

这不是把每一个结果都cur1变成变量ab吗?我如何确保我目前在 variable 的第一个索引上a

这是一个关于我将如何使用结果的示例(用 PostgreSQL 编写)。

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;
4

2 回答 2

3

cur1将读取每一行的结果。每次循环它都会获得下一行。所以它第一次循环时会得到第一行。这将一直持续到循环中断或没有更多行可用(在这种情况下会出现无数据条件。

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

于 2013-08-05T02:28:28.930 回答
1

当您可以使用连接进行处理时,为什么要使用循环?

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

这适用于 Postgres 和 MySQL。

于 2013-08-05T02:24:23.070 回答