Er zijn eigenlijk twee problemen in uw vraag. Het eerste probleem is om Number
. te maken kolom uniek en de tweede is om de kolom Name
te verhogen door een nummer toe te voegen als het al bestaat.
EERSTE DEEL
Aangezien het nummer UNIQUE
is , dwing een UNIQUE
. af beperking op de kolom. Het kan een PRIMARY KEY
. zijn of een UNIQUE KEY
.
Als de kolom geen KEY
. heeft en je wilt het PRIMARY
. maken , hier is de ALTER
verklaring:
ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
maar als je alleen wilt dat het UNIQUE
is en geen primaire sleutel,
ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
TWEEDE DEEL
Je kunt het echt doen zonder join te gebruiken.
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 (meer voorbeeld toegevoegd )
- SQLFiddle-demo (gooit uitzondering vanwege uniciteit )
Enkele details:
wanneer de waarde in kolom Number
al bestaat, zal het een foutmelding geven omdat de kolom uniek is. Ik heb een opmerking gelezen van een verwijderd bericht waarin staat:"..Nummer is niet uniek, maar als het bestaat, wil ik geen record invoeren." -- het heeft geen zin als je geen uniekheid wilt toevoegen op de kolom. Hoe weet je of het nummer al bestaat of niet? Een kleine controle uitvoeren op het bestaan van Number
voelt als een beetje overhead voor mij. Dus mijn beste aanbeveling is om uniciteit af te dwingen.