2010-12-13 7 views
3

Est-il possible de faire une mise à jour incrémentielle dans une insertion de mise à jour de clé en double dans mysql?mise à jour incrémentielle dans l'insertion ... sur la clé dupliquée

Exemple w/erreur:

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 

Répondre

1

NO, vous ne pouvez pas spécifier source = source + values(source);
car la table source blah ne sont pas inclus dans le select, en utilisant alias ne réglera pas.

Une solution utilisera 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 */ 

méfiez-vous sur 1:N relation

+0

vous devez avoir fait mieux à la lecture de l'OP que moi; point pris – zanlok

1

Que faire si vous préfixe de la table au nom de la colonne, à savoir blah.source, address_book.source?

Questions connexes