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%'
- Demo SQLFiddle
- Demo SQLFiddle (aggiunto altro esempio )
- SQLFiddle Demo (genera un'eccezione a causa dell'unicità )
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à.