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
);