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