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