我有一张MySQL表:
parent_id是同一个表中id的外键。
我想将版本= 1的所有记录复制到版本= 2,同时保留父/子结构。
当我使用此查询时:
INSERT INTO
table
(
name,
parent_id,
version
)
SELECT
name,
parent_id,
2
FROM
table
WHERE
version = 1
新记录(ofcourse)成为旧记录的子项......那么,如何将parent_id设置为新创建的记录?
答案 0 :(得分:1)
您可以尝试开发一种映射策略,在该策略中您可以找出新ID的位置并将其映射回它们,或者您可以简单地将新ID偏移一定量:
INSERT INTO `table` (id, name, parent_id, version)
SELECT id+10000, name, parent_id+10000, 2
FROM `table`
WHERE version=1
在这种情况下,10000将大于该表中的SELECT MAX(id)
。如果锁定表,计算最大值并执行插入,则可以将其写为单个语句。
4
答案 1 :(得分:0)
试试这个:
INSERT INTO
table
(
name,
parent_id,
version
)
SELECT
name,
id,
2
FROM
table
WHERE
version = 1