Dynamic 如何使用execute语句为变量赋值

Dynamic 如何使用execute语句为变量赋值,dynamic,mariadb,Dynamic,Mariadb,我需要沿着这条线执行代码 select @a := id from B limit @i ,1 然而,mysql不允许在limit中传递变量,所以我尝试了另外两种方法 select @proc := concat('select @a := id from B limit ', @i, ',1'); prepare stmt from @proc; execute stmt; 这会产生一个错误,就像 select @proc := concat(' id from B limit ',

我需要沿着这条线执行代码

select @a := id from B limit @i ,1 
然而,mysql不允许在limit中传递变量,所以我尝试了另外两种方法

select @proc := concat('select @a := id from B limit ', @i, ',1');
prepare stmt from @proc; 
execute stmt; 
这会产生一个错误,就像

select @proc := concat(' id from B limit ', @i, ',1');
prepare stmt from @proc; 
select @a := execute stmt;
请注意,我以前从未在任何地方声明过@a,但我现在迷路了,不知道如何继续。

试试:

MariaDB[\u]>SET@`a`:=NULL,
->@`proc`:=CONCAT('SELECT@`a`:=`B`.`id`
“>从'B`
'>LIMIT',IFNULL(@`i',0),',1
'>                             ');
查询正常,0行受影响(0.00秒)
MariaDB[\u]>从“proc”准备“stmt”;
查询正常,0行受影响(0.00秒)
编写的声明
MariaDB[\u]>执行'stmt';
+------------------+
|@`a`:=`B`.`id`|
+------------------+
|               10 |
+------------------+
一行一组(0.00秒)
MariaDB[\u]>解除分配准备'stmt';
查询正常,0行受影响(0.00秒)
MariaDB[\u]>选择a`;
+------+
|@`a`|
+------+
|   10 |
+------+
一行一组(0.00秒)
更新

另一个不使用函数的选项

MariaDB[\u]>SET@`a`:=NULL,
->@`i`:=IFNULL(@`i`,0);
查询正常,0行受影响(0.00秒)
MariaDB[\u]>准备'stmt'FROM'选择'a':='B`.`id`
“>从'B`
“>限制”,1
'>                           ';
查询正常,0行受影响(0.00秒)
编写的声明
MariaDB[\u]>使用@i`执行'stmt';
+------------------+
|@`a`:=`B`.`id`|
+------------------+
|               10 |
+------------------+
一行一组(0.00秒)
MariaDB[\u]>解除分配准备'stmt';
查询正常,0行受影响(0.00秒)
MariaDB[\u]>选择a`;
+------+
|@`a`|
+------+
|   10 |
+------+
一行一组(0.00秒)

您使用的是哪个版本的MySQL?它是mariaDB 10.0.2 ifnull语句的目的是什么?顺便说一句,您使用``的想法奏效了,所以我接受了答案,但是您能解释一下为什么使用它吗IFNULL@avz2611:是为变量
@`i`
指定一个默认值,以防它为空。啊,好的,谢谢,我想我现在应该养成使用背虱的习惯了:P@avz2611:支票。