Na verdade, existem dois problemas na sua pergunta. O primeiro problema é fazer com que
Number
coluna única e a segunda é incrementar a coluna Name
anexando um número se ele já existir. PRIMEIRA PARTE
Como o número é
UNIQUE
, impõe um UNIQUE
restrição na coluna. Pode ser uma PRIMARY KEY
ou uma UNIQUE KEY
. Se a coluna não tiver
KEY
e você deseja torná-lo PRIMARY
, aqui está o ALTER
demonstração:ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
mas se você quiser apenas que seja
UNIQUE
e não uma chave primária, ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
SEGUNDA PARTE
Você pode realmente fazer isso sem usar join.
INSERT INTO TableName(Number, Name)
SELECT 124 AS Number,
CONCAT('Robert', COALESCE(MAX(CAST(REPLACE(Name, 'Robert', '0') AS UNSIGNED)) + 1,'')) AS Name
FROM TableName
WHERE Name LIKE 'Robert%'
- Demonstração do SQLFiddle
- Demonstração do SQLFiddle (adicionado mais exemplo )
- Demonstração do SQLFiddle (lança exceção devido à exclusividade )
Alguns detalhes:
quando o valor fornecido na coluna
Number
já existe, ele lançará um erro, pois a coluna é única. Li um comentário de uma postagem excluída dizendo:"..O número não é único, mas se existir, não quero inserir um registro." -- não faz sentido se você não quiser adicionar singularidade na coluna. Como você saberá se o número já existe ou não? Fazendo uma pequena verificação da existência de Number
parece um pouco em cima para mim. Portanto, minha melhor recomendação é reforçar a exclusividade.