sql >> Database teknologi >  >> RDS >> Mysql

Vil du kombinere to forespørgsler for at kontrollere for dubletter i MySQL?

Der er faktisk to problemer i dit spørgsmål. Det første problem er at lave Number kolonne unik, og den anden er at øge kolonnen Name ved at tilføje et nummer, hvis det allerede findes.

FØRSTE DEL

Da nummeret er UNIQUE , gennemtving en UNIQUE begrænsning på søjlen. Det kunne være en PRIMARY KEY eller en UNIQUE KEY .

Hvis kolonnen ikke har nogen KEY og du vil gøre det til PRIMARY , her er ALTER erklæring:

ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
 

men hvis du kun vil have det til at være UNIQUE og ikke en primær nøgle,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
 

ANDEN DEL

Du kan faktisk gøre det uden at bruge 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%'

Nogle detaljer:

når værdien er angivet i kolonne Number allerede eksisterer, vil det give en fejl, da kolonnen er unik. Jeg har læst en kommentar fra et slettet indlæg, der siger:"..Antallet er ikke unikt, men hvis det findes, vil jeg ikke indtaste en post." -- det giver ingen mening, hvis du ikke vil tilføje unik på søjlen. Hvordan ved du, om nummeret allerede eksisterer eller ej? Foretager en lille kontrol for eksistensen af ​​Number føles som lidt overhead for mig. Så min bedste anbefaling er at håndhæve unikhed.



  1. rake afbrudt! uinitialiseret konstant Mysql2

  2. Sådan importeres en DBF-fil i SQL Server

  3. Find ud af, hvilket valutasymbol din session bruger i Oracle

  4. Sådan opsætter du en PostgreSQL-database i Django