sql >> Databasteknik >  >> RDS >> Mysql

Kombinera två frågor för att söka efter dubbletter i MySQL?

Det finns faktiskt två problem i din fråga. Det första problemet är att göra Number kolumn unik och den andra är att öka kolumnen Name genom att lägga till ett nummer om det redan finns.

FÖRSTA DEL

Eftersom numret är UNIQUE , genomdriv en UNIQUE begränsning på kolumnen. Det kan vara en PRIMARY KEY eller en UNIQUE KEY .

Om kolumnen inte har någon KEY och du vill göra den till PRIMARY , här är ALTER uttalande:

ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)

men om du bara vill att det ska vara UNIQUE och inte en primärnyckel,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)

ANDRA DEL

Du kan faktiskt göra det utan att använda 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%'

Några detaljer:

när värdet anges i kolumnen Number redan finns, kommer det att ge ett fel eftersom kolumnen är unik. Jag har läst en kommentar från ett raderat inlägg som säger:"..Numret är inte unikt, men om det finns vill jag inte ange en post." -- det är inte meningsfullt om du inte vill lägga till unikhet på kolumnen. Hur vet du om numret redan finns eller inte? Gör en liten kontroll efter förekomsten av Number känns lite overhead för mig. Så min bästa rekommendation är att upprätthålla unikhet.



  1. MySql i DNX 5.0

  2. Kombinera två bord med sql JOIN?

  3. SQL Server 2008 Tom sträng mot utrymme

  4. SQL - WHERE-villkor på SUM()