Det finns faktiskt två problem i din fråga. Det första problemet är att göra Number
kolumn unik och den andra är att öka kolumnen Name
genom att lägga till ett nummer om det redan finns.
FÖRSTA DEL
Eftersom numret är UNIQUE
, genomdriv en UNIQUE
begränsning på kolumnen. Det kan vara en PRIMARY KEY
eller en UNIQUE KEY
.
Om kolumnen inte har någon KEY
och du vill göra den till PRIMARY
, här är ALTER
uttalande:
ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
men om du bara vill att det ska vara UNIQUE
och inte en primärnyckel,
ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
ANDRA DEL
Du kan faktiskt göra det utan att använda 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%'
- SQLFiddle Demo
- SQLFiddle Demo (lagt till fler exempel )
- SQLFiddle Demo (kastar undantag på grund av unikhet )
Några detaljer:
när värdet anges i kolumnen Number
redan finns, kommer det att ge ett fel eftersom kolumnen är unik. Jag har läst en kommentar från ett raderat inlägg som säger:"..Numret är inte unikt, men om det finns vill jag inte ange en post." -- det är inte meningsfullt om du inte vill lägga till unikhet på kolumnen. Hur vet du om numret redan finns eller inte? Gör en liten kontroll efter förekomsten av Number
känns lite overhead för mig. Så min bästa rekommendation är att upprätthålla unikhet.