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