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

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

<p>Je souhaite mettre à jour l'intégralité de la colonne <strong>email</strong> en utilisant le format index de ligne + email@gmail.com. </p> <p>Voici les données de mon tableau</p> <table class="s-table"> <tête> <tr> <th>id</th> <th>E-mail</th> ≪/tr> ≪/tête> <corps> <tr> <td>12</td> <td>abc@gmail.com</td> ≪/tr> <tr> <td>23</td> <td>pqr@gmail.com</td> ≪/tr> </tcorps> </tableau> <p>Voici le résultat que je souhaite</p> <table class="s-table"> <tête> <tr> <th>id</th> <th>E-mail</th> ≪/tr> ≪/tête> <corps> <tr> <td>12</td> <td>1email@gmail.com</td> ≪/tr> <tr> <td>23</td> <td>2email@gmail.com</td> ≪/tr> </tcorps> </tableau> <p>J'ai essayé la requête ci-dessous, mais je n'ai pas obtenu le résultat attendu. </p> <pre class="brush:php;toolbar:false;">;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'</pre> <p>Ce n'est pas seulement 3 lignes, j'ai plus de 500 lignes dans ma table <code>cus</code> 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. </p>
P粉362071992P粉362071992443 Il y a quelques jours419

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

  • P粉201448898

    P粉2014488982023-08-27 14:25:34

    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 ;

    répondre
    0
  • P粉885035114

    P粉8850351142023-08-27 00:04:35

    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ème si l'e-mail n'est pas unique.

    répondre
    0
  • Annulerrépondre