Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połączyć dwa zapytania, aby sprawdzić duplikaty w MySQL?

W twoim pytaniu są właściwie dwa problemy. Pierwszym problemem jest zrobienie Number kolumna unikalna, a druga to zwiększenie kolumny Name dołączając numer, jeśli już istnieje.

CZĘŚĆ PIERWSZA

Ponieważ numer to UNIQUE , wymuś UNIQUE ograniczenie na słupie. Może to być PRIMARY KEY lub UNIQUE KEY .

Jeśli kolumna nie zawiera KEY i chcesz, aby był PRIMARY , oto ALTER oświadczenie:

ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)

ale jeśli chcesz tylko, aby był UNIQUE a nie klucz podstawowy,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)

CZĘŚĆ DRUGA

Możesz to zrobić bez korzystania z dołączania.

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

Kilka szczegółów:

gdy wartość podana w kolumnie Number już istnieje, zgłosi błąd, ponieważ kolumna jest unikalna. Przeczytałem komentarz z usuniętych postów o treści:"..Numer nie jest unikalny, ale jeśli istnieje, nie chcę wprowadzać rekordu." -- nie ma sensu, jeśli nie chcesz dodawać wyjątkowości na kolumnie. Skąd będziesz wiedzieć, czy numer już istnieje, czy nie? Małe sprawdzenie istnienia Number wydaje mi się trochę nad głową. Więc moją najlepszą rekomendacją jest egzekwowanie unikalności.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyłączyć logowanie root do MySQL, gdy nie podano hasła?

  2. Czy powinienem znormalizować moją bazę danych, czy nie?

  3. połączenie z bazą danych nie działa po utworzeniu pliku jar

  4. Auto-inkrementacja MySQL na odrębną wartość wprowadzoną w innej kolumnie?

  5. Jak zresetować hasło roota MySQL lub MariaDB w systemie Linux?