在CONCAT中时无法执行MySQL SELECT陈述式

时间:2018-09-23 11:08:29

标签: mysql

我一直试图在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()不会被执行/导致过程失败吗?

1 个答案:

答案 0 :(得分:0)

tl; dr您要编写的语句的格式为SELECT(rest of statement) LIMIT 1。它的格式应为SELECT rest of statement LIMIT 1

您似乎要创建变量列名ummm,因为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是变量。

所以要获得您想要的字符串

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