Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kombinieren Sie zwei Abfragen, um in MySQL nach Duplikaten zu suchen?

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 verwenden
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%'

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.