6

我今天被困在 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 rather fetching name1 field's value.

可以对此提出任何建议,我需要使用正确的函数而不是 concat 虽然我知道在调用 concat 时输出 name1 的权利,但我想将其用作列名。

4

2 回答 2

13

您可以做的是在存储过程中使用准备好的语句,这将允许您执行字符串查询:

举个简单的例子:

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 演示对其进行测试

于 2012-07-28T07:32:14.320 回答
5

存储过程更新语句中的动态列名

DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `selname`()
BEGIN
    declare cl int ;
    declare clvalue int ;

    set cl=1;
    SET clvalue=1;
    while cl < 4 DO
        SET clvalue=clvalue*cl;
        SET @sql = CONCAT('update test set col',cl, '=',clvalue,' where id=1');
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
        set cl=cl+1;
   end while;

END //
DELIMITER ;
于 2015-03-19T10:04:30.527 回答