Der er faktisk to problemer i dit spørgsmål. Det første problem er at lave Number
kolonne unik, og den anden er at øge kolonnen Name
ved at tilføje et nummer, hvis det allerede findes.
FØRSTE DEL
Da nummeret er UNIQUE
, gennemtving en UNIQUE
begrænsning på søjlen. Det kunne være en PRIMARY KEY
eller en UNIQUE KEY
.
Hvis kolonnen ikke har nogen KEY
og du vil gøre det til PRIMARY
, her er ALTER
erklæring:
ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
men hvis du kun vil have det til at være UNIQUE
og ikke en primær nøgle,
ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
ANDEN DEL
Du kan faktisk gøre det uden at bruge 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 (tilføjet mere eksempel )
- SQLFiddle Demo (kaster undtagelse på grund af unikhed )
Nogle detaljer:
når værdien er angivet i kolonne Number
allerede eksisterer, vil det give en fejl, da kolonnen er unik. Jeg har læst en kommentar fra et slettet indlæg, der siger:"..Antallet er ikke unikt, men hvis det findes, vil jeg ikke indtaste en post." -- det giver ingen mening, hvis du ikke vil tilføje unik på søjlen. Hvordan ved du, om nummeret allerede eksisterer eller ej? Foretager en lille kontrol for eksistensen af Number
føles som lidt overhead for mig. Så min bedste anbefaling er at håndhæve unikhed.