0

我有一个 MySQL 表:

  • ID
  • 姓名
  • parent_id
  • 版本

parent_id 是同一个表中 id 的外键。

我想将版本 = 1 的所有记录复制到版本 = 2,同时保留父/子结构。

当我使用这个查询时:

INSERT INTO 
    table 
    (
        name,
        parent_id,
        version
    )
SELECT
    name,
    parent_id,
    2
FROM 
    table
WHERE 
    version = 1

新记录(当然)成为旧记录的孩子......那么,我怎样才能将 parent_id 设置为新创建的记录?

4

2 回答 2

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

于 2013-10-02T14:52:35.987 回答
0

试试这个:

INSERT INTO 
    table 
    (
        name,
        parent_id,
        version
    )
SELECT
    name,
    id,
    2
FROM 
    table
WHERE 
    version = 1
于 2013-10-02T14:23:25.923 回答