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%'
- Demo SQLFiddle
- Demo SQLFiddle (menambahkan lebih banyak contoh )
- Demo SQLFiddle (melempar pengecualian karena keunikan )
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.