连接在MySQL存储过程中是如何工作的?
您好,这是我试图在MySQL中执行的示例查询。当我使用concat函数时,它给出了一个错误连接在MySQL存储过程中是如何工作的?,mysql,stored-procedures,concatenation,Mysql,Stored Procedures,Concatenation,您好,这是我试图在MySQL中执行的示例查询。当我使用concat函数时,它给出了一个错误 SELECT @grp :=San_Orange_CS_GRP as santoor_grp , @_11:=power(@grp,0.1)+0.1*@_11 AS concat "@grp" , "_11" , @_12:=power(@grp,0.2)+0.1*@_12 AS concat "@grp" , "_12" FROM DUMMY JOIN (SELECT @_11:=0,
SELECT @grp :=San_Orange_CS_GRP as santoor_grp ,
@_11:=power(@grp,0.1)+0.1*@_11 AS concat "@grp" , "_11" ,
@_12:=power(@grp,0.2)+0.1*@_12 AS concat "@grp" , "_12"
FROM DUMMY JOIN (SELECT @_11:=0,@_12:=0) t;
当我每次在AS语句之后的查询中修改代码并给出列名时,它工作得很好。但问题是我有大约100个专栏,所以每次我运行不同的市场grp时,我都不能继续写这些名字
SELECT @grp :=Orange_CS_GRP as Orange_CS_grp ,
@_11:=power(@grp,0.1)+0.1*@_11 Orange_CS_GRP_11 ,
@_12:=power(@grp,0.2)+0.1*@_12 AS Orange_CS_GRP_12
from DUMMY JOIN (SELECT @_11:=0,@_12:=0) t;
提前感谢:-这是concat的精确查询: 选择@grp:=San_Orange_CS_grp作为santoor_grp, @_11:=power@grp,0.1+0.1*@_11asconcat@grp , _11 , @_12:=power@grp,0.2+0.1*@@玻璃钢 从虚拟连接选择@u11:=0,@u12:=0t 在查询中使用concat不正确
谢谢别名是标识符,不能根据列的值动态分配名称 为此,可以使用存储过程 例如:
我不确定您将如何使用它,因为若结果集只有一行,那个么在表达式名称上使用动态别名可能会更好。不能为每行上的表达式指定新名称,这也没有意义。这就是我在grp结果集上添加LIMIT子句的原因。将您的输出发布到某个网站上,如所示,并让我知道它不是预期的。我需要的列名为Orange_CS_grp_11,Orange_CS_grp_12,Orange_CS_GRP_13等…您可以发布select@sql的输出吗?顺便说一下:Orange_CS_GRP是您的列名或值之一?是的,一列是Orange_CS_GRP,其余列由此列上的校准完成
drop procedure if exists sp_so_q23692874;
delimiter //
create procedure sp_so_q23692874()
begin
-- read my comment below this SP.
SELECT San_Orange_CS_GRP INTO @grp FROM DUMMY LIMIT 1;
set @grp_name := 'Orange_CS_GRP';
set @sql := concat( 'SELECT San_Orange_CS_GRP as santoor_grp ' );
set @sql := concat( @sql, ', @_11 := power( ', @grp, ', 0.1 ) + 0.1 * @_11 ' );
set @sql := concat( @sql, 'AS `', @grp_name, '_11` ' );
set @sql := concat( @sql, ', @_12 := power( ', @grp, ', 0.2 ) + 0.1 * @_12 ' );
set @sql := concat( @sql, 'AS `', @grp_name, '_12` ' );
set @sql := concat( @sql, ' FROM DUMMY JOIN ( SELECT @_11 := 0, @_12 := 0 ) t' );
prepare stmt from @sql;
execute stmt;
drop prepare stmt;
end;
//
delimiter ;
call sp_so_q23692874();
-- select @sql;