MySql,组合变量来制作变量的名称?

时间:2016-01-21 21:39:50

标签: mysql variables join reference concatenation

我目前在MySql中编写一个函数,要求我能够执行以下某种操作:

 SET argNumber = 2;
 SELECT x.x_id 
   FROM x, piv
  WHERE x.x_id = concat('piv.x', argNumber)
  LIMIT 1;

正如您在上面所看到的那样,我正试图连接起来。'和argNumber的变量值来创建piv.x2,这是表piv中的一列。我遇到的问题是,在我使用concat函数之后,该过程将结果字符串视为数据而不是引用。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

应该是(假设piv.xvarchar列,您需要先将其转换为正确的类型)

concat(piv.x, '2')

您的查询应该是

 SELECT x.x_id 
 FROM x JOIN piv
  ON x.x_id = concat( CAST(piv.x AS VARCHAR), argNumber)
  LIMIT 1;

根据您的评论,您需要动态查询。然后像下面这样做

SET @sql =CONCAT("SELECT x.x_id FROM x JOIN piv ON x.x_id = piv.x", argNumber, " LIMIT 1");
 PREPARE stmt FROM @sql;
 EXECUTE stmt;
 DEALLOCATE PREPARE stmt;

答案 1 :(得分:0)

您需要使用PREPARE创建动态SQL:

SET argNumber = 2;
PREPARE stmt FROM CONCAT('
    SELECT x.x_id 
    FROM x, piv
    WHERE x.x_id = piv.x', argNumber, '
    LIMIT 1');
EXECUTE stmt;

要将SELECT的结果输入变量,您可以在语句中指定一个变量,如下所述:

How to get scalar result from prepared statement?

PREPARE stmt FROM CONCAT('
    SELECT @id := x.x_id 
    FROM x, piv
    WHERE x.x_id = piv.x', argNumber, '
    LIMIT 1');

执行语句后,变量@id包含所选的ID。