0
這裏是我寫的程序 - 遊標c1
& c2
。 c2
裏面c1
,我試着聲明c2
以下c1
(在c1
遊標外),但是I
未服用的更新值:(任何建議,使它的工作將是有益的,感謝mysql動態光標
create table t1(i int);
create table t2(i int, j int);
insert into t1(i) values(1), (2), (3), (4), (5);
insert into t2(i, j) values(1, 6), (2, 7), (3, 8), (4, 9), (5, 10);
delimiter $
CREATE PROCEDURE p1()
BEGIN
DECLARE I INT;
DECLARE J INT;
DECLARE done INT DEFAULT 0;
DECLARE c1 CURSOR FOR SELECT i FROM t1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN c1;
REPEAT
FETCH c1 INTO I;
IF NOT done THEN
select I;
DECLARE c2 CURSOR FOR
SELECT j FROM t2 WHERE i = I;
OPEN c2;
REPEAT
FETCH c2 into J;
IF NOT done THEN
SELECT J;
END IF;
UNTIL done END REPEAT;
CLOSE c2;
set done = 0;
END IF;
UNTIL done END REPEAT;
CLOSE c1;
END$
delimiter ;
謝謝比爾。是的,我們可以使用連接,但我的問題是我們可以做同樣的事情,而不使用連接,但使用兩個遊標。 有時,在這種情況下,JOIN可能會非常昂貴,解決方案是什麼? – user237865 2010-02-03 11:02:02
加入是昂貴的,這是一個神話。當然,它的效率遠高於* N + 1 *'SELECT'查詢的效率。 – 2010-02-03 14:48:06