我试图计算表格中的行数并为字段“随机”生成随机数 现在这个有效:
SELECT COUNT(*) FROM my_table;
这有效:
UPDATE my_table SET random = FLOOR(6500 * RAND()) + 1;
但这不起作用:
UPDATE my_table SET random = FLOOR((SELECT COUNT(*) ) * RAND()) + 1;
但是这会将行计为0并添加一行,因此所有字段都具有第一个而不是唯一的随机数。
任何想法,我做错了都会有所帮助。
答案 0 :(得分:8)
这个怎么样?
SELECT @cnt := count(*) FROM my_table;
UPDATE my_table SET random = FLOOR(@cnt * RAND()) + 1;
答案 1 :(得分:0)
你在问你做错了什么。正如MySQL手册所说"目前,您无法更新表并从子查询中的同一个表中进行选择。"这意味着你不能做像
这样的事情update my_table set random = (select min(my_field) from r);
作为更新的一部分,您正在进行完整的选择。
但是,您可以使用没有找到错误的select,但结果不是您所期望的 - SELECT语句的范围与您使用它时只是当时正在处理的行。您可以通过创建名为num
的字段并执行此操作来测试:
update my_table set random = (select count(*));
您会看到每行的random设置为1,因为select正在查看您当时正在更新的那一行。
解决方案是计算行数,将其存储在变量中,并在另一个语句中引用该变量。
SET @row_count = count(*) from my_table;
UPDATE my_table SET random = FLOOR(@cnt * RAND()) + 1;