如何从MS Access数据库中获取随机记录

14

我有一个MS Access数据库。其中一个表包含带有主键questionID的问题和答案。 我需要使用questionID从该表中随机检索问题。 对于这种情况,我应该使用哪些关键字或查询?

3个回答

26

要获取不同的随机记录,您可以使用ORDER BY RAND(),这需要在您的表中有一个ID字段。

SELECT TOP 1 questionID FROM questions ORDER BY Rnd(-(100000*questionID)*Time())
将负值作为参数传递给Rnd函数将使用该参数作为起始值从生成器中提供第一个随机值(一种已定义的随机化方法)。 特别感谢@kobik在评论中的提示。

2
有趣的事情。我测试了所有建议的答案,包括这个,我得到不同/随机的记录。但是,一旦我再次运行我的测试程序,结果就与之前的顺序相同。就像随机种子生成器在ms-access中每次重置一样。后来我发现了这个:随机数生成器查询并不那么随机 - kobik
每次我运行它,它都会做同样的事情,我得到相同的4个结果。 - Glen Morse
那么你建议如何修复@Kobik? - Glen Morse
8
@GlenMorse,这里有一个可行的解决方法(Bummi,你可能需要编辑你的回答):在MS Access中使用ORDER BY NEWID(),因此使用负数与Rnd()一起“修复”问题。使用:ORDER BY Rnd(-(1000*ID)*Time()) - kobik

16
以下代码将从您的表中获取一个随机的问题ID:
MySQL
SELECT questionID FROM questions ORDER BY RAND() LIMIT 1

微软Access数据库

SELECT top 1 questionID from questions ORDER BY rnd(questionID)

8
MS Access 版本似乎会生成随机记录,但每次都是相同的记录! - kneidels
1
同意。相同的随机记录。 - Glen Morse

4
SELECT TOP 5 questionID FROM [tableName] ORDER BY rnd(INT(NOW*questionID)-NOW*questionID)

这将为您提供每次新的答案集,甚至在使用“NOW”时也无需想出一个时间(无论您点击多快,它都会是一个新时间),在我看来,这是在Access中解决这个问题最简单而整洁的方法。

这个方法对我来说完全正常。所有其他方法都给出了相同的记录集。干得好。 - MatVAD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接