Isso é apenas um palpite, já que você não forneceu seu esquema, mas uma das colunas em sua chave exclusiva é anulável?
Editar:
Como @G-Nugget diz nos comentários, você precisa de uma chave exclusiva nas colunas em questão:
https://dev.mysql.com/doc /refman/5.6/en/insert-on-duplicate.html
Você precisa ter uma chave exclusiva na combinação de colunas que deve ser exclusiva.
por exemplo:
ALTER TABLE yourTable ADD UNIQUE KEY (`canid`, `categoryid`);
Além disso, ao fazer perguntas sobre o banco de dados, inclua
SHOW CREATE TABLE para as tabelas em questão.