添加具有变量值名称的列
Add column with name of variable value
在程序内部,我想创建一个临时的table“报告”,其中包含另一个table“描述”行内容的列名,但是我得到了错误,因为我的查询而不是使用变量“tmp_description”值,使用其名称创建新列。如何使用变量值作为新列的名称?
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE tmp_description varchar(30);
...
CREATE TEMPORARY TABLE descriptions (description varchar(30));
insert into descriptions
select distinct description from pure;
SELECT COUNT(*) INTO n FROM descriptions;
SET i=0;
WHILE i<n DO
SELECT * INTO tmp_description FROM (SELECT * FROM descriptions LIMIT i,1) t1;
ALTER TABLE report
ADD COLUMN
tmp_description FLOAT(2) DEFAULT 0.0; <-- I get error here
SET i = i + 1;
END WHILE;
我认为在 while
循环中这样做没有任何价值。无论如何,您的循环机制都已关闭,因为您使用的是 LIMIT
而没有 ORDER BY
- 这意味着每次迭代返回的行是任意的。
为什么不只构造一个语句?首先运行:
select group_concat('add column ', description, ' numeric(2)' separator ', ') as columns
from t;
请注意,float(2)
作为一种数据类型对我来说并没有真正的意义。我怀疑你真的想要 numeric
/decimal
类型。
然后拿结果。在它们前面加上 alter table report
和 运行 代码。
您可以使用动态 SQL 执行此操作,但我认为这样做没有任何好处。
在程序内部,我想创建一个临时的table“报告”,其中包含另一个table“描述”行内容的列名,但是我得到了错误,因为我的查询而不是使用变量“tmp_description”值,使用其名称创建新列。如何使用变量值作为新列的名称?
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE tmp_description varchar(30);
...
CREATE TEMPORARY TABLE descriptions (description varchar(30));
insert into descriptions
select distinct description from pure;
SELECT COUNT(*) INTO n FROM descriptions;
SET i=0;
WHILE i<n DO
SELECT * INTO tmp_description FROM (SELECT * FROM descriptions LIMIT i,1) t1;
ALTER TABLE report
ADD COLUMN
tmp_description FLOAT(2) DEFAULT 0.0; <-- I get error here
SET i = i + 1;
END WHILE;
我认为在 while
循环中这样做没有任何价值。无论如何,您的循环机制都已关闭,因为您使用的是 LIMIT
而没有 ORDER BY
- 这意味着每次迭代返回的行是任意的。
为什么不只构造一个语句?首先运行:
select group_concat('add column ', description, ' numeric(2)' separator ', ') as columns
from t;
请注意,float(2)
作为一种数据类型对我来说并没有真正的意义。我怀疑你真的想要 numeric
/decimal
类型。
然后拿结果。在它们前面加上 alter table report
和 运行 代码。
您可以使用动态 SQL 执行此操作,但我认为这样做没有任何好处。