Rumah  >  Soal Jawab  >  teks badan

Cipta nilai unik baharu dalam lajur

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粉210405394P粉210405394399 hari yang lalu804

membalas semua(1)saya akan balas

  • P粉205475538

    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

    .

    balas
    0
  • Batalbalas