规范化 - 将数据迁移到另一个 Table
Normalization - Migrate Data to Another Table
我有一个 table template
字段 json
。由于 json
对于许多 template
(1:n) 可能相同,我创建了另一个 table template_json
并将字段 template_json_id
(FK) 添加到 template
.
为了将所有数据从一个 table 迁移到另一个我使用了以下 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;
如果您有重复项,您应该填充一个 select 不同的
INSERT INTO db.template_json (`json`)
SELECT distinct `json`
FROM db.template;
好的,这将是一个多步骤的过程。您已经创建了新的 table 并填充了它。下一步是消除重复项。有很多不同的方法可以做到这一点,我想到的一种是:
DELETE FROM template_json WHERE id in (SELECT * FROM (SELECT id FROM template_json GROUP BY json HAVING COUNT(*) > 1) as A);
这可能会很慢。下一步是更新现有的 table.
UPDATE template
INNER JOIN template_json on template_json.json = template.json
SET template.template_json_id = template_json.id;
这也可能相当慢。 json 列上的索引可能会有所帮助。最后,备份后。
ALTER TABLE template DROP COLUMN json;
我有一个 table template
字段 json
。由于 json
对于许多 template
(1:n) 可能相同,我创建了另一个 table template_json
并将字段 template_json_id
(FK) 添加到 template
.
为了将所有数据从一个 table 迁移到另一个我使用了以下 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;
如果您有重复项,您应该填充一个 select 不同的
INSERT INTO db.template_json (`json`)
SELECT distinct `json`
FROM db.template;
好的,这将是一个多步骤的过程。您已经创建了新的 table 并填充了它。下一步是消除重复项。有很多不同的方法可以做到这一点,我想到的一种是:
DELETE FROM template_json WHERE id in (SELECT * FROM (SELECT id FROM template_json GROUP BY json HAVING COUNT(*) > 1) as A);
这可能会很慢。下一步是更新现有的 table.
UPDATE template
INNER JOIN template_json on template_json.json = template.json
SET template.template_json_id = template_json.id;
这也可能相当慢。 json 列上的索引可能会有所帮助。最后,备份后。
ALTER TABLE template DROP COLUMN json;