Créer une nouvelle valeur unique dans la colonne
P粉210405394
P粉210405394 2023-09-16 13:14:40
0
1
863

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粉210405394
P粉210405394

répondre à tous(1)
P粉205475538

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

.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal