【发布时间】:2014-02-04 18:25:34
【问题描述】:
我有一个随机名称表,只有 3 列(id、firstname、lastname)。
我正在尝试让 SQL 使用从该表中随机选择的名称更新整个名称表。
这是我正在使用的 SQL。它似乎适用于某些记录,但并不总是对所有记录都有效,有时会留下 NULLS,或者并不总是更新所有行。有时它会影响 9 行,有时它会说影响 11 行......有什么想法吗?
update TestNames,rndnames
set TestNames.fname = rndnames.FirstName,TestNames.lname=rndnames.LastName
where rndnames.ID=floor(1+(rand()*600))
答案:
update
TestNames left join
(select ID,
floor(1+(rand()*600)) as rndid
from TestNames) as TN on TN.ID=TestNames.id
left join rndnames on TN.rndid=rndnames.id
set TestNames.fname=rndnames.FirstName,TestNames.lname=rndnames.LastName
【问题讨论】:
-
你有 1 到 600 条随机姓名记录吗?
-
floor(1+(rand()*600))生成的值范围是否与rndnames中的实际行匹配? -
是的,正好有600条记录,填的是从1到600的自增ID