【发布时间】:2016-11-23 23:09:23
【问题描述】:
这是我的简化,rent_ids 字符串的值在循环后返回 null。我已经知道循环工作正常,并且rent_ids 的值随着每次迭代而变化。
BEGIN
DECLARE rent_ids VARCHAR(265);
DECLARE tmp_rent_id int;
create temporary table due_rent_ids (rent_id int);
SET rent_ids = "";
set @test = "Insert into due_rent_ids (rent_id) select unit_id from tbl_rent";
PREPARE stmt1 FROM @test;
EXECUTE stmt1;
BEGIN
DECLARE cur1 CURSOR for select rent_id from due_rent_ids;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO tmp_rent_id;
IF rent_ids = "" THEN
SET rent_ids = tmp_rent_id;
ELSE
SET rent_ids = concat(rent_ids, ", ", tmp_rent_id);
END IF;
END LOOP;
CLOSE cur1;
END;
select * from tbl_unit where unit_id in (rent_ids);
DEALLOCATE PREPARE stmt1;
END
【问题讨论】:
-
你为什么不直接使用
SELECT GROUP_CONCAT(rent_id) FROM due_rent_ids? -
IN (rent_ids)不会以逗号分隔字符串。它只是寻找与整个字符串完全匹配的内容。
标签: mysql loops stored-procedures concatenation