Всъщност във вашия въпрос има два проблема. Първият проблем е да направите 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
ми се струва малко излишно. Така че най-добрата ми препоръка е да наложите уникалност.