重複行を同じテーブルに入れようとしています。表Aにはがありません。auto_increment(残念ながら)INSERTごとにMySQLサブクエリの再評価
INSERT INTO A (id, foreign_id, value)
SELECT (SELECT MAX(id)+1 FROM A), 2, value
FROM A WHERE foreign_id = 1;
しかし(SELECT MAX(id)+1 FROM A)
が一度計算されるので、それは常に同じIDを返します。 2行目の挿入時に、クエリは失敗します(プライマリキーの重複)。
私はそれが最初に試さ:
INSERT INTO A (id, foreign_id, value)
SELECT MAX(id)+1, 2, value
FROM A WHERE foreign_id = 1;
しかしMAX(id)+1
アカウントWHERE foreign_id = 1
にかかるので、私は未使用のIDを取得します保証はありません。私はどちらかに進むことができますどのように
:
- は、一般的に、各
INSERT
- 以上再計算されたサブクエリを持っている:なしAUTO_INCREMENT
マルチユーザシステムでは、一意の番号を生成するために 'max(id)+ 1'を使用すると失敗します。 –
の代わりにautoincrementカラムを使用する必要があります。実際には複製していないこと、異なるIDを持つ別のレコードを作成しようとしていること、foreign_IDが2ですが、foreign_IDが1のレコードと同じ値を持つこと?あなたは{1,1,1} {3,1,2}のレコードを持っていれば{4,2,1}と{5,2,2}の新しいセットが必要ですか?もしそうなら、あなたは「複製する」と考えているレコードはいくつありますか?既存のレコードを順番に従わなければなりませんか? {4,2,1}と{5,2,2}は{4,2,1}と{6,2,2}の代わりになりますか?作業? – xQbert
@a_horse_with_no_nameはい、私は知っている、これは単なる大きなスクリプト、マルチユーザーや何もありません。 –