我有一个表template
,其中包含字段json
。由于许多json
(1:n)template
可以相同,因此我创建了另一个表template_json
,并将字段template_json_id
(FK)添加到template
。
要将所有数据从一个表迁移到我使用以下SQL的antoher:
INSERT INTO db.template_json (`json`)
SELECT `json`
FROM db.template;
这会完美地迁移数据,但当然会将template.template_json_id
留空。我需要从插入内容更新每行template.template_json_id
(FK)和template_json.id
。
是否可以在一个查询中执行此操作?
答案 0 :(得分:1)
如果您没有重复,则可以使用内部联接更新
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;
答案 1 :(得分:1)
DELETE FROM template_json WHERE id in (SELECT * FROM (SELECT id FROM template_json GROUP BY json HAVING COUNT(*) > 1) as A);
这可能非常慢。下一步是更新现有表。
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;