MySQLは答えません!次のように重複するキーを挿入するための解決策
基本的なクエリである
INSERT INTO destination (A,B,C)
SELECT a1,b1,c1
FROM source
WHERE (selectconditions) ;
ソースは、インサートが重複して記録するとすぐに失敗することを意味し、またはすでに先にあってもなくてもよい多数のレコードが含まれています(Aがキーであると仮定)遭遇する。
所望の挙動:INSERTまたはこれは、与えられた問題のために、所望のシナリオで
IGNORE。できる場合は挿入し、そうでない場合は続行します。
擬似C#/ Javaの:
foreach(record in selectQuery)
{
try { destination.insert(record) }
catch(insertionException){//squelch}
}
これは、クエリの最後に
AND NOT EXISTS (SELECT A FROM destination INNER JOIN source on destination.A = source.a1)
を追加することによって、SQLで扱うことができます - あなたが挿入する前に、言い換えれば、チェックしてください。
この共通の状況を処理するための他の代替手段は何ですか?これらのテクニックの長所と短所は何ですか?そうしないと
INSERT INTO destination
(A, B, C)
SELECT a1, b1, c1 FROM source
WHERE source.pk not in (SELECT pk FROM destination);
:あなたは、共通の主キーを共有している場合
いつもAを主キーにすることはできますか? –