mysql使用select命令创建临时表列

mysql使用select命令创建临时表列,mysql,Mysql,我需要创建一个临时表,该表的列名将使用select命令动态生成(表示:另一个表的值)。但是当我运行该命令时,使用值而不是列名创建临时表。 我尝试了以下方法: 从表A中选择ColVal 表 ------------------------ ColName | ColVal ------------------------ id | 1 ---------------------- Name | Test ---------------------- Age |25 ---

我需要创建一个临时表,该表的列名将使用select命令动态生成(表示:另一个表的值)。但是当我运行该命令时,使用值而不是列名创建临时表。 我尝试了以下方法:

从表A中选择ColVal

------------------------
ColName | ColVal 
------------------------
id      | 1
----------------------
Name    | Test
----------------------
Age     |25
---------------------
现在,我需要创建临时表B,其列名如下

表B

--------------
id| Name| Age|
--------------
-----------------
ColName
-----------------
id
--------
Name
--------
Age
--------
我尝试了以下查询:

CREATE TEMPORARY TABLE  TableB as (select ColName  from TableA) 
它没有给我实际的输出。它可以创建如下表:

表B

--------------
id| Name| Age|
--------------
-----------------
ColName
-----------------
id
--------
Name
--------
Age
--------

我不确定这是否是最好的方法,但您可以运行动态构造的sql。你可以这样做:

SELECT  CONCAT("CREATE TEMPORARY TABLE TableB (", 
               group_concat( CONCAT(ColName, " VARCHAR(50)")), ");")
               INTO @Expression
FROM TableA;

PREPARE myquery FROM @Expression;
EXECUTE myquery;

@表达式将等于:
创建临时表TableB(id VARCHAR(50)、Name VARCHAR(50)、Age VARCHAR(50))

您可以尝试在
id
列上旋转以将行转换为列。只要谷歌“PivotQuerySQL”,你们就会找到帮助。可能是重复的:问题是。字段是动态的,意思是:在这里我只写3个值。它可以是3到30个不同的名称。如果重复标记,例如group_concat(distinct),在group_concat中包含一个distinct子句可能会很有用