Инкрементное обновление во вставке... на дубликате ключа
Есть ли способ сделать инкрементное обновление при вставке обновления дубликата ключа в MySQL?
Пример с ошибкой:
insert into blah (user_id, prefix, email_id, field, source)
select user_id, substring(name, 1, 3), contact_email_id, 2, source from address_book
on duplicate key update source = source + values(source);
ERROR 1052 (23000): Column 'source' in field list is ambiguous
2 ответа
Решение
НЕТ, вы просто не можете указать source = source + values(source);
потому что исходная таблица blah
не входит в select
Использование псевдонима не исправит.
Обходной путь будет использовать left join
insert into blah (user_id, prefix, email_id, field, source)
select
ab1.user_id, substring(ab1.name, 1, 3), ab1.contact_email_id, 2,
if(ab2.source, ab1.source+ab2.source, ab1.source)
from
address_book ab1
left join
blah1 as ab2
on
ab1.user_id=ab2.user_id
on duplicate key
update source = values(source);
/* values(source) = ab1.source+ab2.source if duplicate found */
Остерегайтесь 1:N
связь
Что если вы добавите таблицу к имени столбца, например, blah.source, address_book.source?