Heim  >  Fragen und Antworten  >  Hauptteil

Erstellen Sie einen neuen eindeutigen Wert in der Spalte

Ich habe eine (MYSQL-)Tabelle im folgenden Format; vorausgesetzt, der Name der Tabelle ist mytable:

id Name Gruppe
123 Name 1 1
124 Name 2 2
125 Name 3 1
126 Name 4

id 是唯一的并且自动递增。 name 是一个唯一的字符串,group ist nur eine Ganzzahl

Ich möchte name4 分配给一个尚不存在的新 group,因此本例中 name4group 不能是 12 jetzt.

Das Ergebnis könnte beispielsweise sein:

id Name Gruppe
126 Name 4 3

Derzeit drücke ich group 降序排序,只需手动插入最大数字 + 1,但我想知道是否有更好/更快的方法在列中生成新的唯一值。 group, was außer der Tatsache, dass es sich um eine Ganzzahl handelt, keine weiteren Einschränkungen hat.

Ich verwende MySQL Workbench, sodass ich SQL-Befehle sowie Workbench-spezifische Optionen verwenden kann, sofern verfügbar.

Sollte etwas unklar sein, helfe ich gerne bei der Klärung.

P粉210405394P粉210405394399 Tage vor803

Antworte allen(1)Ich werde antworten

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

    请在此处查看演示。

    Antwort
    0
  • StornierenAntwort