mysql - 规范化 - 将数据迁移到另一个表

标签 mysql sql normalization

我有一个带有字段 json 的表模板。由于 json 对于许多 template 来说可能是相同的 (1:n),我创建了另一个表 template_json 并添加了字段 template_json_id (FK) 到模板

为了将所有数据从一个表迁移到另一个表,我使用了以下 SQL:

INSERT INTO db.template_json (`json`)
SELECT `json`
FROM db.template;

这可以完美地迁移数据,但当然会让我的 template.template_json_id 为空。我需要使用插入中的 template_json.id 更新每行的 template.template_json_id (FK)。

是否可以在一个查询中完成此操作?

最佳答案

如果您没有重复项,您可以使用内部联接并进行更新

update template
inner join template on template_json.json = template.json
set template.template_json_id = template_json.id;

如果您有重复项,则应使用选择的不同内容进行填充

INSERT INTO db.template_json (`json`)
SELECT distinct `json`
FROM db.template;

关于mysql - 规范化 - 将数据迁移到另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39511426/

相关文章:

MySQL百分比查询

sql - CASE 和 WHEN SQL

mysql - MySQL 中的键有什么用?

python - 如何使用 python 动态展平深度嵌套的 json 文件?

python - 无法使用 Anaconda Python Stack 在 Windows 上导入 MySQLdb

mysql - 如何在mysql中设置SELECT语句的输出值?

mysql - 我在 mysql 中的查询是正确的,但是当我将其应用到 VB.net 时,我的代码中有问题

php - SELECT id 其中来自多列的最小值或最大值

python - python中离散功率谱密度的正确归一化实际问题

python - 使用 Numpy 与硬编码进行标准化