如果我在MS Access中运行此查询:
SELECT q2.questionText, Answers.answerText
FROM Questions q2 INNER JOIN Answers ON q2.questionID = Answers.questionID
WHERE q2.questionID IN (SELECT TOP 15 q.questionID
FROM Questions q
ORDER BY RND(q.questionID));
我有时会得到双倍的answerText行。如果我从输出中输入数字列表:
SELECT TOP 15 a.questionID
FROM Questions a
ORDER BY RND(a.questionID)
并使用上面超级查询中的数字:
SELECT q2.questionText, Answers.answerText
FROM Questions q2 INNER JOIN Answers ON q2.questionID = Answers.questionID
WHERE q2.questionID IN (125, 7, 44, 119, 85, 189, 159, 167, 11, 50, 23, 96, 18, 99, 121);
它按预期工作。我在两个questionID字段上强制执行参照完整性。我一直在反复删除表并从我添加行的文本文件导出中再次导入它们。怎么解决?
答案 0 :(得分:1)
对我来说,RND(a.QuestionID)可以不止一次给出相同的数字。我还建议“我有时得到双倍的answerText”意味着它在某些时候有效,而第二个查询恰好是偶然的。
也许是:
SELECT TOP 15 questionID FROM( SELECT DISTINCT TOP 30 a.questionID 来自问题a ) ORDER BY RND(questionID)
可能有帮助,但它仍然不能保证你得到同一个问题的倍数,只是它的机会大大降低,因此你应该能够从明显随机生成的集合中得到至少15个问题。 / p>
答案 1 :(得分:0)
“反复删除表并从文本文件导出中再次导入它们”的事情导致答案重复,这搞砸了结果。删除Answers表中的重复项修复了该问题。抱歉浪费你宝贵的时间;直到现在我才想到检查它。