【发布时间】:2018-03-08 04:20:36
【问题描述】:
我有两个 MySQL 表,我需要使用另一个表中的行值动态重命名一个表的列。 例如:
表_1:
Advertiser_ID, Ad_Id, Clicks, conv_342, conv_439
----------------------------------------------------------------------
23232 231112 5 10 12
23232 231119 22 34 19
表_2:
conversion_id, conversion_name
-------------------------------
conv_342 Conversion_A
conv_439 Conversion_B
我需要将转换 ID(表 1 中的列标题和表 2 中的行值)映射到转换名称,即表 2 值。
结果应如下所示:
Advertiser_ID, Ad_Id, Clicks, Conversion_A, Conversion_B
----------------------------------------------------------------------
23232 231112 5 10 12
23232 231119 22 34 19
转换 id 和名称的列表很长,并且可以动态更改,因此无法硬编码此数据集。数据集一开始也很大。我已经到处寻找解决方案,但其他类似的问题都没有给我答案。
这是直接在 MySQL 引擎上运行的 MySQL,因此不允许使用任何编程语言(PHP、Python、R 等)。
我尝试了什么
我可以使用以下代码确定 Table_1 列标题是否与 Table_2 中的一行匹配:
SELECT COLUMN_NAME as 'fb_columns'
FROM information_schema.columns
Where table_name='table1'
AND COLUMN_NAME
IN (
SELECT conversion_id
From table2
)
但我不知道如何使用转换名称重命名列。任何帮助或线索将不胜感激!
编辑:值得注意的是,如果您知道使用 Amazon Redshift 执行此操作的方法,我有资源将其从 MySQL 切换到 Redshift。谢谢!
【问题讨论】:
-
您将需要运行一个 alter table 语句 - 我不确定 mysql 但在 Oracle 中,您可以使用类似 execute immediate 并在引用 a 的脚本中执行影响 DDL / DML 的语句游标提供的变量 - 但这是一种编程语言,所以... ... ...
-
@Jeff 我可以运行一个变更表,但是我不相信 MySQL 允许你执行立即数...
-
一个选项可能是使用13.6.6 Cursors 和13.5 Prepared SQL Statement Syntax 的组合。
标签: mysql pivot amazon-redshift