【发布时间】:2021-06-27 01:13:31
【问题描述】:
我想导入一个有 43 列的表,其中一列是“标签”,它有多个用逗号分隔的值,如下所示:
我知道正确的方法是创建一个具有主键和标签的新表。例如对于产品 x 我们有
x1, tag1
x1, tag2
x1, tag3
但问题是,当我有数千行数据且每行都有多值标签时,我什至如何才能真正做到这一点?如何将其转换为 1nf 规范化并插入所有数据?
事实:
- 我使用的是 SQL Server 2016,但我也可以尝试使用 MySQL。
- 源数据是 Excel,我要将该数据导入数据库(MySQL 或 SQL Server)
谢谢
【问题讨论】:
-
所以您只想根据其中的列表将单个标签拆分为多行?
-
您的研究向您展示了什么?
-
说实话,如果是我,我可能会分两步接近它。首先,只需将原始数据从 Excel 获取到临时/临时表中。其次,在 SQL 中有一个例程逐行处理暂存数据 - 这样,您在插入“标签”数据时就知道每一行的上下文(所以关系是正确的)。有多种方法可用于将逗号分隔的字符串转换为行表
-
@Harry 是的,基本上第一步是将它们分成多行(将在 1nf 中标准化),然后将它们放入新表(2nf)
-
slq 服务器有 string_split 功能。一旦数据在 SQL 中,您应该能够使用此函数将它们分开
标签: mysql sql sql-server migration normalization