Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Combine duas consultas para verificar duplicatas no MySQL?


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

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.