Hier ist die Abfrage:
update TestNames t cross join
rndnames r
set t.fname = r.FirstName,
t.lname = r.LastName
where r.ID = floor(1+(rand()*600));
Es aktualisiert nur eine Zeile in testnames wenn die vom Ausdruck gewählte zufällige ID mit einer ID in der Tabelle übereinstimmt. Sind die id Werte in rndnames alle belegt?
Wenn Ihre Tabelle nicht sehr groß ist und eine id hat , hier ist ein anderer Ansatz:
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;
BEARBEITEN:
Ich denke, das wird auch funktionieren:
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
);