我今天卡在MysqL中,在mysql select语句中需要动态列名.让我解释:
sql> select name1 from namescollection.
sql> select name2 from namescollection.
sql> select name3 from namescollection.
因此,namescollection表有三列,其名称为name1,name2,name3
我想在我的存储过程中查询此表为1,2,3为动态,并将作为变量传递,但在我查询时也在简单的sql上:
SELECT concat('name','1') FROM `namescollection`
name1 —– name1而不是获取name1字段的值.
可以对此进行任何建议,正确的功能我需要使用相当concat虽然我知道它在调用concat时输出name1的权利,但我想将它用作列名.
最佳答案
你可以做的是在你的存储过程中使用一个准备好的语句,它允许你执行一个字符串查询:
举个简单的例子:
DELIMITER //
CREATE PROCEDURE selname (IN col VARCHAR(20))
BEGIN
SET @sql = CONCAT('SELECT ',col,' FROM tbl');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END//
DELIMITER ;
用这个SQLFiddle Demo进行测试