Moyen de mettre à jour une colonne entière à l'aide de l'index de ligne et de la valeur codée en dur dans Mysql
David Beckham
David Beckham 2023-08-26 15:24:30
0
2
371

Je souhaite mettre à jour l'intégralité de la colonne email en utilisant le format index de ligne + email@gmail.com.

Voici les données de mon tableau

≪/tr> ≪/tête> ≪/tr> ≪/tr>

Voici le résultat que je souhaite

id E-mail
12 abc@gmail.com
23 pqr@gmail.com
≪/tr> ≪/tête> ≪/tr> ≪/tr>

J'ai essayé la requête ci-dessous, mais je n'ai pas obtenu le résultat attendu.

;avec C comme ( sélectionnez email,row_number() over(order by id asc) comme rowid de parce que ) mise à jour C set email = rowid+'email@gmail.com'

Ce n'est pas seulement 3 lignes, j'ai plus de 500 lignes dans ma table cus Ce serait mieux si quelqu'un pouvait me donner une solution qui ne nécessite pas de boucle. S'il vous plaît, aidez-moi à créer une requête SQL. Merci.

David Beckham
David Beckham

répondre à tous (2)
P粉201448898

Cela semble fonctionner, mais je pense qu'il existe une solution plus élégante qui ne nécessite pas l'utilisation de join...

SELECT * FROM cus ; update cus inner join ( select id ,email,row_number() over(order by id asc) as rowid from cus )a on a.id = cus.id set cus.email = concat(a.rowid, a.email) ; SELECT * FROM cus ;

Test complet

-- 创建表 CREATE TABLE cus ( id INTEGER PRIMARY KEY, email TEXT NOT NULL ); -- 插入数据 INSERT INTO cus VALUES (0021, 'Clark'); INSERT INTO cus VALUES (0402, 'Dave'); INSERT INTO cus VALUES (005, 'Ava' ); SELECT * FROM cus ; update cus inner join ( select id ,email,row_number() over(order by id asc) as rowid from cus )a on a.id = cus.id set cus.email = concat(a.rowid, a.email) ; SELECT * FROM cus ;
    P粉885035114

    C'est peut-être ce que vous voulez faire :

    WITH C AS ( SELECT email,ROW_NUMBER() OVER(ORDER BY id ASC) AS rowid FROM cus ) UPDATE cus JOIN C ON cus.email=C.email SET cus.email=CONCAT(rowid,'email@gmail.com');

    Connectez la table (cus)与Ccte) que vous souhaitez mettre à jour, puis mettez-la à jour en conséquence.

    Voici une démo

    @QisM n'est en effet pas propre àemail不唯一时的语法提出了疑虑,由于OP没有提到,我同意如果email, ce n'est pas la solution. J'ai donc légèrement modifié la syntaxe :

    WITH C AS ( SELECT id, email, ROW_NUMBER() OVER(ORDER BY id ASC) AS rowid FROM cus ) UPDATE cus JOIN C ON cus.id=C.id AND cus.email=C.email SET cus.email=CONCAT(rowid,'email@gmail.com');

    Vérifiez maintenantcte带有id,并且在JOIN C ON ..条件中,我添加了匹配id. Après test,cela résoudra le problèmesi l'e-mail n'est pas unique.

      Derniers téléchargements
      Plus>
      effets Web
      Code source du site Web
      Matériel du site Web
      Modèle frontal
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!
      id E-mail
      12 1email@gmail.com
      23 2email@gmail.com