如何在SQL中创建非规范表1的规范化版本 实现多爱好列转换
横排多爱好字段拆分为规范化单值字段的实现方法
转换核心逻辑是将原表中同一行存储的多个并列爱好字段,通过行拆分重组为单值列存储的规范化结构,全程无需复杂关联查询即可完成。
通用SQL实现步骤
- 先创建符合目标结构的新表2,对应字段为
Id、name、hobby三个独立列 - 通过两次独立查询分别读取原表的
hobby1、hobby2字段值,给两个查询的结果列统一命名为hobby,使用UNION ALL将两段查询结果纵向拼接,直接写入新表2即可
可直接执行的参考SQL代码:
-- 创建目标规范化表 CREATE TABLE table2 ( Id INT, name VARCHAR(50), hobby VARCHAR(100) ); -- 拆分原表数据写入新表 INSERT INTO table2 (Id, name, hobby) SELECT Id, name, hobby1 AS hobby FROM table1 UNION ALL SELECT Id, name, hobby2 AS hobby FROM table1;
实操注意事项
- 优先使用
UNION ALL而非UNION:前者不会触发全量结果去重操作,执行性能更高,完全适配这类拆分字段的场景,不会引入额外计算开销 - 空值过滤适配:如果原表存在某条记录中
hobby1或hobby2为NULL的情况,拆分后会生成爱好值为空的无效行,可在每段SELECT的查询逻辑中加入空值判断过滤,例如给两段查询分别追加WHERE hobby1 IS NOT NULL、WHERE hobby2 IS NOT NULL条件 - 扩展兼容:如果后续原表新增更多并列爱好字段(如hobby3、hobby4),只需在
UNION ALL后追加对应读取该字段的SELECT语句即可,无需调整原有转换逻辑
内容的提问来源于stack exchange,提问作者Dynastywarriorlord07
相关产品推荐
相关产品推荐

