在列中建立新的唯一值
P粉210405394
P粉210405394 2023-09-16 13:14:40
0
1
840

我有一個以下格式的(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粉210405394
P粉210405394

全部回覆(1)
P粉205475538

在 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;

請在此處查看示範。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板