recherche

Maison  >  Questions et réponses  >  le corps du texte

Créer une nouvelle valeur unique dans la colonne

J'ai une table (MYSQL) au format suivant ; en supposant que le nom de la table est mytable :

id Nom Groupe
123 Nom 1 1
124 Nom 2 2
125 Nom 3 1
126 Nom 4

id 是唯一的并且自动递增。 name 是一个唯一的字符串,group n'est qu'un entier

Je veux name4 分配给一个尚不存在的新 group,因此本例中 name4group 不能是 12 maintenant.

Par exemple, le résultat pourrait être :

id Nom Groupe
126 Nom 4 3

Actuellement, j'appuie sur group 降序排序,只需手动插入最大数字 + 1,但我想知道是否有更好/更快的方法在列中生成新的唯一值。 group qui n'a d'autre contrainte que d'être un nombre entier.

J'utilise MySQL Workbench, je peux donc utiliser les commandes SQL ainsi que les options spécifiques à Workbench si disponibles.

Si quelque chose n'est pas clair, je serai heureux de vous apporter des éclaircissements.

P粉210405394P粉210405394523 Il y a quelques jours895

répondre à tous(1)je répondrai

  • P粉205475538

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

    Dans MySQL 8.0, vous pouvez obtenir de l'aide sur deux fonctions de fenêtre :

    • MAX, récupérez la valeur maximale "groupe"
    • ROW_NUMBER, récupère la valeur incrémentielle pour chaque NULL présent dans le tableau.

    Vous pouvez ensuite additionner ces deux valeurs et mettre à jour le tableau avec le champ "Groupe" vide.

    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;

    Découvrez la démo ici.


    Dans 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;
    Découvrez la démo UPDATE 语句中增量更新。 >SETici

    .

    répondre
    0
  • Annulerrépondre