Rumah > Soal Jawab > teks badan
Saya mempunyai jadual (MYSQL) dalam format berikut;
mytable
Nama | Kumpulan | |
---|---|---|
Nama 1 | 1 | |
Nama 2 | 2 | |
Nama 3 | 1 | |
Nama 4 |
id
是唯一的并且自动递增。 name
是一个唯一的字符串,group
Saya mahu
name4
分配给一个尚不存在的新 group
,因此本例中 name4
的 group
不能是 1
或 2
Sebagai contoh, hasilnya mungkin:
Nama | Kumpulan | |
---|---|---|
Nama 4 | 3 |
yang tidak mempunyai kekangan lain selain daripada menjadi integer.
group
降序排序,只需手动插入最大数字 + 1,但我想知道是否有更好/更快的方法在列中生成新的唯一值。 group
Saya menggunakan MySQL Workbench, jadi saya boleh menggunakan arahan SQL serta pilihan khusus Workbench jika tersedia.
Jika ada yang kurang jelas, saya dengan senang hati akan memberikan penjelasan.
P粉2054755382023-09-17 00:08:56
Dalam MySQL 8.0, anda boleh mendapatkan bantuan pada dua fungsi tetingkap:
MAX
, dapatkan nilai maksimum "kumpulan"ROW_NUMBER
, mendapatkan semula nilai tambahan untuk setiap NULL yang terdapat dalam jadual. Anda kemudian boleh menjumlahkan dua nilai ini dan mengemas kini jadual dengan medan "Kumpulan" kosong.
WITH cte AS ( SELECT id, name, MAX(group_) OVER() + ROW_NUMBER() OVER(PARTITION BY group_ IS NULL ORDER BY name) AS new_group FROM tab ) UPDATE tab INNER JOIN cte ON tab.id = cte.id AND tab.name = cte.name SET tab.group_ = cte.new_group WHERE tab.group_ IS NULL;
Lihat demo di sini.
Dalam MySQL 5.
SET @maxgroup = NULL;
SELECT MAX(group_) INTO @maxgroup FROM tab;
UPDATE tab
SET group_ = (@maxgroup:= @maxgroup + 1)
WHERE group_ IS NULL;
ORDER BY id;
Lihat demo UPDATE
语句中增量更新。 >SETdi sini