НЕТ ответов MySQL, пожалуйста!
Основной запрос выглядит следующим образом (предположим, что A - это ключ)
INSERT INTO destination (A,B,C)
SELECT a1,b1,c1
FROM source
WHERE (selectconditions) ;
Источник содержит много записей, которые могут быть, а могут и не находиться в месте назначения, что означает, что вставка завершится неудачно, как только обнаружится дублирующаяся запись.
Желаемое поведение: INSERT или IGNORE
Это желаемый сценарий для данной проблемы. Вставьте, если можете, в противном случае продолжите.
Pseudo c # / 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)
до конца запроса - другими словами, проверьте перед вставкой.
Какие есть другие альтернативы решению этой распространенной ситуации? Каковы плюсы и минусы этих методов?