sql >> Databáze >  >> RDS >> Mysql

Zkombinovat dva dotazy pro kontrolu duplikátů v MySQL?

Ve vaší otázce jsou ve skutečnosti dva problémy. První problém je vytvořit Number sloupec jedinečný a druhý je zvýšit sloupec Name připojením čísla, pokud již existuje.

PRVNÍ ČÁST

Protože číslo je UNIQUE , vynutit UNIQUE omezení na sloupu. Může to být PRIMARY KEY nebo UNIQUE KEY .

Pokud sloupec nemá KEY a chcete jej nastavit jako PRIMARY , zde je ALTER prohlášení:

ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)

ale pokud chcete, aby byl pouze UNIQUE a nikoli primární klíč,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)

DRUHÁ ČÁST

Ve skutečnosti to můžete udělat bez použití 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ěkteré podrobnosti:

když je hodnota uvedena ve sloupci Number již existuje, vyvolá chybu, protože sloupec je jedinečný. Přečetl jsem si komentář ze smazaných příspěvků:"..Číslo není jedinečné, ale pokud existuje, nechci zadávat záznam." -- nedává to žádný smysl, pokud nechcete přidat jedinečnost na sloupu. Jak zjistíte, zda číslo již existuje nebo ne? Provádíme malou kontrolu existence Number přijde mi to trochu nad hlavou. Takže moje nejlepší doporučení je prosadit jedinečnost.



  1. Prohledejte GROUP_CONCAT pomocí LIKE

  2. Jak vytvořit vypočítané pole v Accessu

  3. ORA-16789:Protokoly opakování v pohotovostním režimu jsou nakonfigurovány nesprávně

  4. WARN SqlExceptionHelper:143 - Chyba SQL:0, SQLState:08S01- SqlExceptionHelper:144 - Selhání komunikačního spojení