Всъщност във вашия въпрос има два проблема. Първият проблем е да направите Number колона уникална, а втората е да увеличите колоната Name като добавите номер, ако вече съществува.
ПЪРВА ЧАСТ
Тъй като номерът е UNIQUE , наложете UNIQUE ограничение на колоната. Може да е PRIMARY KEY или UNIQUE KEY .
Ако колоната няма KEY и искате да го направите PRIMARY , ето ALTER изявление:
ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
но ако искате само да е UNIQUE а не първичен ключ,
ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
ВТОРА ЧАСТ
Всъщност можете да го направите без да използвате 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%'
- SQLPiddle Демо
- SQLPiddle Демо (добавен още пример )
- SQLPiddle Демо (изхвърля изключение поради уникалност )
Някои подробности:
когато стойността е предоставена в колона Number вече съществува, ще изведе грешка, тъй като колоната е уникална. Прочетох коментар от изтрити публикации, който казва:"..Номерът не е уникален, но ако съществува, не искам да въвеждам запис." -- няма никакъв смисъл, ако не искате да добавите уникалност на колоната. Как ще разберете дали номерът вече съществува или не? Правим малка проверка за съществуването на Number ми се струва малко излишно. Така че най-добрата ми препоръка е да наложите уникалност.