连接在MySQL存储过程中是如何工作的?

连接在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,

您好,这是我试图在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,@_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;