Mysql
 sql >> база данни >  >> RDS >> Mysql

Комбинирайте две заявки, за да проверите за дубликати в MySQL?

Всъщност във вашия въпрос има два проблема. Първият проблем е да направите Number колона уникална, а втората е да увеличите колоната Name като добавите номер, ако вече съществува.

ПЪРВА ЧАСТ

Тъй като номерът е UNIQUE , наложете UNIQUE ограничение на колоната. Може да е PRIMARY KEY или UNIQUE KEY .

Ако колоната няма KEY и искате да го направите PRIMARY , ето ALTER изявление:

ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)

но ако искате само да е UNIQUE а не първичен ключ,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)

ВТОРА ЧАСТ

Всъщност можете да го направите без да използвате 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%'

Някои подробности:

когато стойността е предоставена в колона Number вече съществува, ще изведе грешка, тъй като колоната е уникална. Прочетох коментар от изтрити публикации, който казва:"..Номерът не е уникален, но ако съществува, не искам да въвеждам запис." -- няма никакъв смисъл, ако не искате да добавите уникалност на колоната. Как ще разберете дали номерът вече съществува или не? Правим малка проверка за съществуването на Number ми се струва малко излишно. Така че най-добрата ми препоръка е да наложите уникалност.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. IF функция в H2 за съвместимост с MySQL

  2. Защо CONCAT() не е по подразбиране на набор от знаци по подразбиране в MySQL?

  3. Еквивалент на varchar(max) в MySQL?

  4. Съвпадение на записи от две таблици

  5. Списък с непразни таблици в MySQL база данни