sql >> Database >  >> RDS >> Mysql

Twee query's combineren om te controleren op duplicaten in MySQL?

Er zijn eigenlijk twee problemen in uw vraag. Het eerste probleem is om Number . te maken kolom uniek en de tweede is om de kolom Name te verhogen door een nummer toe te voegen als het al bestaat.

EERSTE DEEL

Aangezien het nummer UNIQUE is , dwing een UNIQUE . af beperking op de kolom. Het kan een PRIMARY KEY . zijn of een UNIQUE KEY .

Als de kolom geen KEY . heeft en je wilt het PRIMARY . maken , hier is de ALTER verklaring:

ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)

maar als je alleen wilt dat het UNIQUE is en geen primaire sleutel,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)

TWEEDE DEEL

Je kunt het echt doen zonder join te gebruiken.

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

Enkele details:

wanneer de waarde in kolom Number al bestaat, zal het een foutmelding geven omdat de kolom uniek is. Ik heb een opmerking gelezen van een verwijderd bericht waarin staat:"..Nummer is niet uniek, maar als het bestaat, wil ik geen record invoeren." -- het heeft geen zin als je geen uniekheid wilt toevoegen op de kolom. Hoe weet je of het nummer al bestaat of niet? Een kleine controle uitvoeren op het bestaan ​​van Number voelt als een beetje overhead voor mij. Dus mijn beste aanbeveling is om uniciteit af te dwingen.



  1. Grote JSON opslaan - binair of tekst

  2. Vind de echte kolomnaam van een alias die in een weergave wordt gebruikt?

  3. Laravel-query om resultaten te krijgen met ten minste één element van een array?

  4. Hoe krijg ik een lijst van alle tabellen in een database met TSQL?