在concat中时无法执行mysql select语句

lhcgjxsq  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(456)

我一直在尝试在mysql中创建一个简单的select语句循环来减少代码。我已经开始用这个了 CONCAT() 但是,这会导致程序停止/失败。例如(其中k是循环计数器): CONCAT('SELECT (Child_', k, ' INTO @Age_Child_', k, ' FROM lookup_childage WHERE ModYear = ModYear_var LIMIT 1)'); 为了诊断这个问题,我只是尝试将select语句(不带串联的循环变量)放在一个字符串中,然后执行。虽然我可以让它对简单的语句起作用,但对以下语句不起作用:

SET @queryString = CONCAT('SELECT Child_1 INTO @Age_Child_1 FROM lookup_childage WHERE ModYear = ModYear_var LIMIT 1');    
PREPARE stmt FROM @queryString;
EXECUTE stmt;

有人知道为什么 @queryString 包含 CONCAT() 语句将不执行/导致过程失败?

bbmckpt7

bbmckpt71#

热释光;博士,你要写的陈述有 SELECT(rest of statement) LIMIT 1 . 它应该有这样的形式 SELECT rest of statement LIMIT 1 .
看起来您想创建变量列名,嗯,因为 lookup_childage 表是非规范化的。我猜那个表有这些列。

Child_1   INT
  Child_2   INT
  Child_3   INT
  Child_4   INT

看来你希望得到一个 @queryString 包含此类内容的值:

SELECT Child_4 INTO @Age_Child_4 FROM lookup_childage WHERE ModYear = ModYear_var LIMIT 1

只有 4 s是可变的。
所以要得到你想要的那根线

SELECT CONCAT('SELECT Child_', k,
               ' INTO @Age_Child_', k,
               ' FROM lookup_childage WHERE ModYear = ModYear_var LIMIT 1'
              )
    INTO @queryString;

相关问题