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

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


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

最佳答案

它应该是(假设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;

07-26 03:08