Ve vaší otázce jsou ve skutečnosti dva problémy. První problém je vytvořit Number
sloupec jedinečný a druhý je zvýšit sloupec Name
připojením čísla, pokud již existuje.
PRVNÍ ČÁST
Protože číslo je UNIQUE
, vynutit UNIQUE
omezení na sloupu. Může to být PRIMARY KEY
nebo UNIQUE KEY
.
Pokud sloupec nemá KEY
a chcete jej nastavit jako PRIMARY
, zde je ALTER
prohlášení:
ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
ale pokud chcete, aby byl pouze UNIQUE
a nikoli primární klíč,
ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
DRUHÁ ČÁST
Ve skutečnosti to můžete udělat bez použití 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%'
- Ukázka SQLFiddle
- Ukázka SQLFiddle (přidán další příklad )
- Ukázka SQLFiddle (vyvolá výjimku kvůli jedinečnosti )
Některé podrobnosti:
když je hodnota uvedena ve sloupci Number
již existuje, vyvolá chybu, protože sloupec je jedinečný. Přečetl jsem si komentář ze smazaných příspěvků:"..Číslo není jedinečné, ale pokud existuje, nechci zadávat záznam." -- nedává to žádný smysl, pokud nechcete přidat jedinečnost na sloupu. Jak zjistíte, zda číslo již existuje nebo ne? Provádíme malou kontrolu existence Number
přijde mi to trochu nad hlavou. Takže moje nejlepší doporučení je prosadit jedinečnost.