MYSQL-如何使用另一个表对应的行更新表头?

MYSQL-如何使用另一个表对应的行更新表头?,mysql,datatable,Mysql,Datatable,我想创建一个MYSQL过程,用TABLE02的相应内容动态重命名TABLE01的头->预期结果如TABLE03所示 以下是表格内容: TABLE01 (EXAMPLE, THE HEADERS MIGHT CHANGE BUT THEY ARE ALWAYS INCLUDED IN TABLE02): id1 | BOOK | AUTHOR | YEAR | 1|Les Miserables|Hugo|1862|

我想创建一个MYSQL过程,用TABLE02的相应内容动态重命名TABLE01的头->预期结果如TABLE03所示

以下是表格内容:

    TABLE01 (EXAMPLE, THE HEADERS MIGHT CHANGE BUT THEY ARE ALWAYS INCLUDED IN TABLE02):

            id1 | BOOK | AUTHOR | YEAR |
            1|Les Miserables|Hugo|1862|
            2|Notre Dame|Hugo|1831|
            |...|...|...|

    TABLE02 (STATIC TABLE THAT STAYS UNCHANGED):

            id2 | INPUT | OUTPUT | LANGUAGE |
            1|BOOK|livre |FR|
            2|AUTHOR|auteur|FR|
            3|YEAR|annee|FR|
            4|...|...|SP|
            5|...|...|SP|
该过程应在此处请求参数“FR”,然后使用表02中的相应内容生成表03,但要更新列标题

         TABLE03 :
            id | livre | auteur | annee |
            1|Les Miserables|Hugo|1862|
            2|Notre Dame|Hugo|1831|  
            |...|...|...|
一个简单的更新就可以了,但我想对具有不同列的各种表进行概括

谢谢你的帮助

编辑1:我重新定义了此处的问题:

免责声明:此解决方案未经测试

我认为您需要使用动态SQL,它将构建SELECT语句并动态创建AS别名AS别名定义列标题名

首先,您需要一些引用表,这假定您的数据库列始终是英文的,并根据需要查找另一种语言*

语言

id| LanguageName
1 | English
2 | Francais
3 | Espanola
属性

id|BaseName | Translation |LanguageId
1 |Book     | Livre       |2
2 |Book     | Libro       |3
3 |Author   | Auteur      |2
4 |Author   | Autora      |3
5 |Year     | Annee       |2
6 |Year     | Ano         |3
然后,存储过程的骨架类似于

SET @language:='French'; # this will be a parameter in your stored procedure

SET @LangId = (SELECT id FROM Language WHERE LanguageName = @language) 

# Get the translation for the columns in your query
SET @BookTranslation:=(SELECT Translation FROM Attribute WHERE BaseName = 'Book' AND LanguageId = @LangId)
SET @AuthorTranslation:=(SELECT Translation FROM Attribute WHERE BaseName = 'Author' AND LanguageId = @LangId)
SET @YearTranslation:=(SELECT Translation FROM Attribute WHERE BaseName = 'Year' AND LanguageId = @LangId)


# build the statement
SET @sql:='SELECT '
SET @sql:=CONCAT(@sql,'Book AS `')
SET @sql:=CONCAT(@sql,@BookTranslation)
SET @sql:=CONCAT(@sql,'`,')
SET @sql:=CONCAT(@sql,'Author AS `')
SET @sql:=CONCAT(@sql,@AuthorTranslation)
SET @sql:=CONCAT(@sql,'`,')
SET @sql:=CONCAT(@sql,'Year AS `')
SET @sql:=CONCAT(@sql,@YearTranslation)
SET @sql:=CONCAT(@sql,'` ')

SET @sql:=CONCAT(@sql,'FROM TABLE01'

# Execute the statement
PREPARE dynamic_statement FROM @sql;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;

**您也可以考虑将表Tab01中的列重命名为AtTr1、AtTr2、Att3,并在AtIrBuTE表中定义英文属性名,但是如果我正确地跟随您的话,这可能会使您的数据库很难与

一起工作,这需要动态SQL。这在MYSQL中如何翻译?非常感谢您的回答,但是,您似乎是在硬编码头的名称,而这些名称将根据主题而变化。那么,您的存储过程如何知道它必须转换什么呢?我想可能有一种方法可以获取表01的头,然后查看表02中的映射,参见重命名的列输入>输出。但是从您之前的注释中可以看出看起来您需要这样做才能是动态的,即对许多查询执行列名查找。需要有一种方法让sp知道它必须转换哪些列,或者它将始终是仅针对TABLE01的查询?这可能是一个有用的方法