Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Gabungkan dua kueri untuk memeriksa duplikat di MySQL?

Sebenarnya ada dua masalah dalam pertanyaan Anda. Soal pertama adalah membuat Number kolom unik dan yang kedua adalah menambah kolom Name dengan menambahkan nomor jika sudah ada.

BAGIAN PERTAMA

Karena nomornya UNIQUE , terapkan UNIQUE kendala pada kolom. Itu bisa berupa PRIMARY KEY atau UNIQUE KEY .

Jika kolom tidak memiliki KEY dan Anda ingin menjadikannya PRIMARY , ini ALTER pernyataan:

ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)

tetapi jika Anda hanya ingin menjadi UNIQUE dan bukan kunci utama,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)

BAGIAN KEDUA

Anda sebenarnya dapat melakukannya tanpa menggunakan 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%'

Beberapa detail:

ketika nilai yang diberikan pada kolom Number sudah ada, itu akan menimbulkan kesalahan karena kolomnya unik. Saya telah membaca komentar dari posting yang dihapus yang mengatakan:"..Nomor tidak unik, tetapi jika ada, saya tidak ingin memasukkan catatan." -- tidak masuk akal jika Anda tidak ingin menambahkan keunikan pada kolom. Bagaimana Anda tahu jika nomor itu sudah ada atau tidak? Melakukan sedikit pengecekan terhadap keberadaan Number terasa seperti sedikit overhead bagi saya. Jadi rekomendasi terbaik saya adalah menegakkan keunikan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan 1022 - Tidak dapat menulis; duplikat kunci dalam tabel

  2. Pantau tabel MySQL untuk perubahan dalam program C#?

  3. Sisipan atau pembaruan massal Slick 3.0 (upsert)

  4. mysql perbarui beberapa kolom dengan yang sama sekarang ()

  5. Mendapatkan karakter khusus dari database MySQL dengan PHP