Mysql 随机唯一编号不起作用

标签 mysql sql random

我正在尝试使用我在其他几个 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

有很多问题:

  1. 如果表中没有代码,我根本得不到任何结果。
  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/

相关文章:

php - 从php mysql数据库填充一个选择框

mysql - 从 Raspberry pi 连接到笔记本电脑上的 MySQL

sql - T-SQL : multiple usage of CTE alias - not only in outer query

c++ - 在程序 C++ 中更改随机种子

php - mysql中的空行预防

php - 更新mysql出错

sql - Presto数组包含一个喜欢某种模式的元素

java - sql 映射到 json 对象

python - 带有python随机数的大数组

java - 生成特定范围内的带有标准偏差的随机数?