我正在尝试使用我在其他几个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
有很多问题:
关于如何使这项工作的任何想法?
谢谢!
答案 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;