while循环使用临时表数据失败

时间:2017-08-31 18:45:58

标签: mysql

我有一个简单的临时表和一个while循环,它检查变量值,然后将数据插入到所述表中。这是我的疑问:

SET @FolderId = 7;

CREATE TEMPORARY TABLE FolderStructure 
(
id int, 
name varchar(255)
);

WHILE (@FolderId > 0) DO
INSERT INTO FolderStructure
SELECT `folders`.`id`,
       `folders`.`folder_name`
FROM `folders`
WHERE `folders`.`id` = @FolderId;

SET @FolderId = (SELECT `folders`.`parent_folder`
FROM `folders`
WHERE `folders`.`id` = @FolderId);
END WHILE;

SELECT * FROM FolderStructure;

DROP TABLE FolderStructure;

错误地出现了:

SQL错误(1064):您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在#WHED(@FolderId> 0)DO附近使用正确的语法     插入FolderStructure     选择`文件夹`.id` '第1行

我不知道我在查询中做错了什么,我已经习惯了MSSQL,这可能就是原因。数据肯定在表格中,如果我在while循环外运行select,它可以正常工作。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

它不起作用,因为MySQL不支持像你问题中那样的即席查询中的循环。您必须创建一个存储过程或函数才能编写WHILE LOOP。

Reference 1

Reference 2

我知道你在想什么 - 是的,它很糟糕。在T-SQL中执行此操作非常简单!