En realidad, hay dos problemas en su pregunta. El primer problema es hacer Number
columna única y la segunda es incrementar la columna Name
agregando un número si ya existe.
PRIMERA PARTE
Dado que el número es UNIQUE
, aplicar un UNIQUE
restricción en la columna. Podría ser una PRIMARY KEY
o una UNIQUE KEY
.
Si la columna no tiene KEY
y quieres que sea PRIMARY
, aquí está el ALTER
declaración:
ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
pero si solo quieres que sea UNIQUE
y no una clave principal,
ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
SEGUNDA PARTE
De hecho, puedes hacerlo sin 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%'
- Demostración de SQLFiddle
- Demostración de SQLFiddle (agregado más ejemplo )
- Demostración de SQLFiddle (arroja una excepción debido a la unicidad )
Algunos detalles:
cuando el valor proporcionado en la columna Number
ya existe, arrojará un error ya que la columna es única. He leído un comentario de una publicación eliminada que dice:"..El número no es único, pero si existe, no quiero ingresar un registro". -- no tiene ningún sentido si no desea agregar singularidad en la columna ¿Cómo sabrás si el número ya existe o no? Haciendo una pequeña verificación de la existencia de Number
se siente como un poco sobrecarga para mí. Así que mi mejor recomendación es hacer cumplir la singularidad.