我正在尝试使用我在其他几个 SO 线程中找到的查询来获取“代码”表中不存在的唯一代码号:
https://stackoverflow.com/a/25435263/471573 https://stackoverflow.com/a/11680058/471573
我目前正在尝试使用此代码:
CREATE TABLE codes (
code int NOT NULL
);
INSERT INTO `codes` (`code`) VALUES
(1),(2),(3),(4),(5);
SELECT FLOOR(RAND() * 10) AS `rand_code`
FROM `codes`
WHERE "rand_code" NOT IN (SELECT `code` FROM `codes`)
LIMIT 1
sqlfiddle:
http://sqlfiddle.com/#!9/5e807/2
有很多问题:
- 如果表中没有代码,我根本得不到任何结果。
- 如果有任何代码,则结果不是唯一的。我可以在表中得到结果...
关于如何实现这项工作有什么想法吗?
谢谢!
最佳答案
rand()
会在查询中出现的所有位置进行计算。要执行您想要的操作,您可以重复运行如下查询:
SELECT r.rand_code
FROM (SELECT FLOOR(RAND() * 10) as rand_code) r
WHERE NOT EXISTS (SELECT 1 FROM codes c WHERE c.code = r.rand_code);
这可能不会返回一行。然后您需要重新运行它。
或者,由于代码数量有限,请使用派生表生成所有代码,然后随机选择不存在的代码:
select r.rand_code
from (select 0 as rand_code union all select 1 . . .
select 9
) r left join
codes c
on c.code = r.rand_ocde
where c.code is null
order by rand()
limit 1;
关于Mysql 随机唯一编号不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43706007/