Es gibt eigentlich zwei Probleme in Ihrer Frage. Das erste Problem besteht darin, Number zu erstellen Spalte eindeutig und die zweite dient dazu, die Spalte Name zu inkrementieren durch Anhängen einer Nummer, falls diese bereits existiert.
ERSTER TEIL
Da die Nummer UNIQUE ist , erzwingen Sie einen UNIQUE Beschränkung auf die Spalte. Es könnte ein PRIMARY KEY sein oder ein UNIQUE KEY .
Wenn die Spalte keinen KEY hat und Sie möchten es zu PRIMARY machen , hier ist der ALTER Aussage:
ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
aber wenn Sie nur wollen, dass es UNIQUE ist und kein Primärschlüssel,
ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
ZWEITER TEIL
Sie können es tatsächlich tun, ohne join.
zu verwendenINSERT 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 (weiteres Beispiel hinzugefügt )
- SQLFiddle-Demo (löst eine Ausnahme aufgrund von Eindeutigkeit aus )
Einige Details:
wenn der Wert in der Spalte Number angegeben ist bereits vorhanden ist, wird ein Fehler ausgegeben, da die Spalte eindeutig ist. Ich habe einen Kommentar zu einem gelöschten Beitrag gelesen, der besagt:..Nummer ist nicht eindeutig, aber wenn sie existiert, möchte ich keinen Datensatz eingeben." -- es macht keinen Sinn, wenn Sie keine Eindeutigkeit hinzufügen möchten auf der Säule. Woher wissen Sie, ob die Nummer bereits existiert oder nicht? Machen Sie eine kleine Überprüfung auf die Existenz von Number fühlt sich für mich nach etwas Overhead an. Daher ist meine beste Empfehlung, Eindeutigkeit zu erzwingen.