0

私はMySQLテーブルを持っています:

  • ID
  • 名前
  • 親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)その表よりも大きくなります。テーブルをロックし、最大値を計算し、挿入を行った場合、これを 1 つのステートメントとして記述できます。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 に答える