如何将表列名替换为另一张关联表的对应字段值
实现方案
根据你的业务场景可以选以下两种最优方案:
方案一:问题固定场景(推荐90%以上场景使用)
如果你的表A不会频繁新增/修改问题编码(Q1/Q2/Q3固定),直接写固定别名的视图即可,性能最好、逻辑最稳定:
-- 以下是通用SQL写法,不同数据库注意别名的转义符差异,MySQL用反引号,SQL Server用方括号,PostgreSQL用双引号 CREATE VIEW user_answer_view AS SELECT UserId, Q1 AS `What is your name`, Q2 AS `How old are you`, Q3 AS `Where are you from` FROM 表B;
方案二:问题动态变化场景
如果表A的问题会持续新增、修改,需要自动同步列名到视图,可以用动态SQL自动生成视图定义,以MySQL为例:
-- 第一步:从表A读取所有问题的对应关系,拼接别名语句 SET @dynamic_select = NULL; SELECT GROUP_CONCAT(CONCAT(QuestionCode, ' AS `', REPLACE(Question, '`', '``'), '`') ORDER BY ID) INTO @dynamic_select FROM 表A; -- 第二步:拼接完整的视图创建语句 SET @create_view_sql = CONCAT( 'CREATE OR REPLACE VIEW user_answer_view AS ', 'SELECT UserId, ', @dynamic_select, ' FROM 表B' ); -- 第三步:执行动态语句生成视图 PREPARE exec_stmt FROM @create_view_sql; EXECUTE exec_stmt; DEALLOCATE PREPARE exec_stmt;
注意事项:
- 每次表A的问题数据变更后,需要执行一次上述语句刷新视图
- 代码里已经做了问题文本中的反引号转义,避免特殊字符导致SQL语法错误
- 其他数据库(SQL Server/PostgreSQL/Oracle)的动态SQL语法略有差异,核心逻辑一致:先查询编码和问题的映射关系,再拼接SELECT别名段生成视图
内容的提问来源于stack exchange,提问作者Emel Uras
相关产品推荐
相关产品推荐

