搜尋

首頁  >  問答  >  主體

在列中建立新的唯一值

我有一個以下格式的(MYSQL)表;假設表的名稱是 mytable:

#
id 姓名 群組
123 名稱1 1
124 名稱2 2
125 名稱3 1
126 名稱4

id 是唯一的並且自動遞增。 name 是一個唯一的字串,group 只是一個整數

我現在想將name4 指派給一個尚不存在的新group,因此本例中name4group 不能是12

例如,結果可能是:

id 姓名 群組
126 名稱4 3

目前,我按 group 降序排序,只需手動插入最大數字 1,但我想知道是否有更好/更快的方法在列中產生新的唯一值。 group 除了是一個整數之外沒有其他約束。

我正在使用 MySQL Workbench,因此我可以使用 SQL 命令以及特定於 Workbench 的選項(如果有)。

如果有任何不清楚的地方,我很樂意提供說明。

P粉210405394P粉210405394523 天前894

全部回覆(1)我來回復

  • P粉205475538

    P粉2054755382023-09-17 00:08:56

    在 MySQL 8.0 中,您可以獲得兩個視窗函數的協助:

    • MAX,檢索最大「group」值
    • ROW_NUMBER,檢索表中存在的每個 NULL 的增量值。

    然後,您可以對這兩個值求和並更新「群組」欄位為空的表。

    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;

    請在此處查看示範。


    在 MySQL 5.X 中,您可以使用一個變量,用最大的「group」值初始化,然後在 UPDATE 語句中增量更新。 >SET 子句。

    SET @maxgroup = NULL;
    SELECT MAX(group_) INTO @maxgroup FROM tab;
    
    UPDATE tab 
    SET group_ = (@maxgroup:= @maxgroup + 1)
    WHERE group_ IS NULL;
    ORDER BY id;

    請在此處查看示範。

    回覆
    0
  • 取消回覆