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.