инкрементное обновление во вставке ... на дубликате ключа - PullRequest
3 голосов
/ 13 декабря 2010

Есть ли способ сделать инкрементное обновление при вставке обновления дубликата ключа в 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 ]

1 голос
/ 14 декабря 2010

НЕТ , вы просто не можете указать source = source + values(source);
, поскольку исходная таблица blah не включена в select, использование псевдонима не исправит.

AОбходной путь будет использовать 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 отношение

1 голос
/ 13 декабря 2010

Что если вы добавите таблицу к имени столбца, т.е. blah.source, address_book.source?

...