Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mise à jour SQl à partir du tableau des noms aléatoires

Voici la requête :

update TestNames t cross join
       rndnames r
    set t.fname = r.FirstName,
        t.lname = r.LastName
    where r.ID = floor(1+(rand()*600));

Il ne met à jour qu'une ligne dans testnames lorsque l'identifiant aléatoire choisi par l'expression correspond à un identifiant dans la table. Sont les id valeurs dans rndnames tous peuplés ?

Si votre table n'est pas très grande et qu'elle a un id , voici une autre approche :

update TestName t join
       (select t.*,
               (select id from rndnames order by rand() limit 1) as rndid
        from testname t
       ) tr
       on t.id = tr.id join
       rndnames r
       on t.rndid = r.id
    set t.fname = r.FirstName,
        t.lname = r.LastName;

MODIFIER :

Je pense que cela fonctionnera également :

update TestNames t cross join
       rndnames r
    set t.fname = r.FirstName,
        t.lname = r.LastName
    where r.ID = (select id
                  from rndnames
                  order by rand()
                  limit 1
                 );