Mysql
 sql >> Database >  >> RDS >> Mysql

Combina due query per verificare la presenza di duplicati in MySQL?

In realtà ci sono due problemi nella tua domanda. Il primo problema è creare Number colonna univoca e la seconda serve per incrementare la colonna Name aggiungendo un numero se esiste già.

PRIMA PARTE

Poiché il numero è UNIQUE , applica un UNIQUE vincolo sulla colonna. Potrebbe essere una PRIMARY KEY o una UNIQUE KEY .

Se la colonna non ha KEY e vuoi renderlo PRIMARY , ecco il ALTER dichiarazione:

ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)

ma se vuoi solo che sia UNIQUE e non una chiave primaria,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)

SECONDA PARTE

Puoi effettivamente farlo senza usare 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%'

Alcuni dettagli:

quando il valore fornito nella colonna Number esiste già, genererà un errore poiché la colonna è univoca. Ho letto un commento da un post cancellato che dice:"..Il numero non è univoco, ma se esiste, non voglio inserire un record." -- non ha alcun senso se non vuoi aggiungere unicità sulla colonna. Come saprai se il numero esiste già o meno? Facendo un piccolo controllo per l'esistenza di Number mi sembra un po' sopra la testa. Quindi la mia migliore raccomandazione è di imporre l'unicità.