Cipta nilai unik baharu dalam lajur
P粉210405394
P粉210405394 2023-09-16 13:14:40
0
1
831

Saya mempunyai jadual (MYSQL) dalam format berikut; mytable

id123124125126
Nama Kumpulan
Nama 1 1
Nama 2 2
Nama 3 1
Nama 4
hanyalah integer

id 是唯一的并且自动递增。 name 是一个唯一的字符串,groupSaya mahu

sekarang.

name4 分配给一个尚不存在的新 group,因此本例中 name4group 不能是 12Sebagai contoh, hasilnya mungkin:

id126
Nama Kumpulan
Nama 4 3

Pada masa ini, saya menekan

yang tidak mempunyai kekangan lain selain daripada menjadi integer.

group 降序排序,只需手动插入最大数字 + 1,但我想知道是否有更好/更快的方法在列中生成新的唯一值。 groupSaya 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粉210405394
P粉210405394

membalas semua(1)
P粉205475538

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

.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!