1

如果我在 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 字段上强制执行参照完整性。我一直在反复删除表并从添加行的文本文件导出中再次导入它们。怎么修?

4

2 回答 2

1

对我来说,RND(a.QuestionID) 可能不止一次给出相同的数字。我还建议“我有时会得到双倍的 answerText”意味着它有时会起作用,而第二个查询只是偶然起作用。

也许是什么:

SELECT TOP 15 questionID FROM (SELECT DISTINCT TOP 30 a.questionID FROM Questions a) ORDER BY RND(questionID)

可能会有所帮助,但它仍然不能保证您获得多个相同的 questionid,只是机会大大减少,因此您应该能够从明显随机生成的集合中获得至少 15 个问题。

于 2013-03-13T10:15:01.703 回答
0

“反复删除表并从文本文件导出中再次导入”的事情导致答案重复,从而弄乱了结果。删除 Answers 表中的重复项解决了该问题。很抱歉浪费了您宝贵的时间;直到现在我才想到要检查。

于 2013-03-13T23:52:18.787 回答