Mysql随机唯一编号不起作用

时间:2017-04-30 11:44:49

标签: 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. 如果有任何代码,结果不是唯一的。我可以在表格中得到一个结果......
  3. 关于如何使这项工作的任何想法?

    谢谢!

1 个答案:

答案 0 :(得分:0)

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;