我想生成一个5位数字,不在数据库内重复.假设我有一个名为numbers_mst的表,其字段名为my_number.
我想以这个my_number字段中不重复的方式生成数字.此前允许前面的零.所以允许像00001这样的数字.另一件事是它应该在00001到99999之间.我怎么能这样做?
我可以猜到的一件事是我可能需要创建一个递归函数来检查表中的数字并生成.
Tus*_*har 52
SELECT FLOOR(RAND() * 99999) AS random_num
FROM numbers_mst
WHERE "random_num" NOT IN (SELECT my_number FROM numbers_mst)
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
这是做什么的:
Sti*_*ael 13
除了Tushar在numbers_mst为空时使其工作的答案:
SELECT random_num
FROM (
SELECT FLOOR(RAND() * 99999) AS random_num
UNION
SELECT FLOOR(RAND() * 99999) AS random_num
) AS numbers_mst_plus_1
WHERE `random_num` NOT IN (SELECT my_number FROM numbers_mst)
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
注意:仅当列配置为时,发布的其他解决方案才有效NOT NULL。如果为NULL,则不会返回任何结果。您可以像这样解决查询:
SELECT random_num
FROM (
SELECT FLOOR(RAND() * 99999) AS random_num
) AS numbers_mst_plus_1
WHERE random_num NOT IN (SELECT my_number FROM numbers_mst WHERE my_number IS NOT NULL)
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
...这...WHERE my_number IS NOT NULL是必要的!
编辑:我只是想提一下,我故意删除了inner SELECT的表名,因为它没有必要,并且如果表中没有数据,似乎会中断?但是,也许这是故意包括在内的吗?—请为所有人澄清或发表评论,谢谢。