sql >> Base de Datos >  >> RDS >> Mysql

¿Combina dos consultas para buscar duplicados en MySQL?

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%'

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.