質問
なMySQLの答えてください!
基本クエリは以下の通りとキー)
INSERT INTO destination (A,B,C)
SELECT a1,b1,c1
FROM source
WHERE (selectconditions) ;
ソースが多く含まれる記録ができ先、その挿入に失敗しますと、重複レコードが発生します。
ご希望の挙動挿入または無視する
このシナリオのために指定された問題です。挿入できれば、そうでないます。
擬似的なデザインインタフェースjava:
foreach(record in selectQuery)
{
try { destination.insert(record) }
catch(insertionException){//squelch}
}
この取り扱うことにSQLを追加
AND NOT EXISTS (SELECT A FROM destination INNER JOIN source on destination.A = source.a1)
最後のクエリー、すなわち、チェックする前に挿入します
何をしなくても代替の取扱い共通したものですか。その是非にこれらすことができないのか?
他のヒント
あなたは、共通の主キーを共有している場合:
INSERT INTO destination
( A, B, C)
SELECT a1, b1, c1 FROM source
WHERE source.pk not in ( SELECT pk FROM destination );
あなたがない場合:
INSERT INTO destination
( A, B, C)
SELECT a1, b1, c1 FROM source
WHERE a1 + b1 + c1 not in ( SELECT a+b+c FROM destination );
私はおそらく次の操作を行います。
INSERT INTO Target (A, B, C)
SELECT
S.A, S.B, S.C
FROM
Source S
LEFT OUTER JOIN Target T ON
T.A = S.A AND
T.B = S.B AND
T.C = S.C
WHERE
T.A IS NULL
MySQLを使用してUNIQUE
インデックスを使用して、非重複キーを強制するの贅沢を持っている場合、あなたは重複の冪等(NO-OP)のアップデートでINSERT ON DUPLICATE KEY UPDATE
を使用することができます。
INSERT INTO Target (A, B, C) (SELECT a1, b1, c1 FROM Source) ON DUPLICATE KEY UPDATE A=A;
これは非常に高速であることと、余分なSELECT
を必要としないという利点を持っています。
所属していません StackOverflow