【发布时间】:2016-06-17 06:34:03
【问题描述】:
我正在尝试从 2 个表中随机选择 N 行。我的第一张桌子是这样的:
q_id | question_text
-----------------
1 | What am I doing?
2 | Who are you?
3 | Hmm?
我要加入的表如下所示:
a_id | q_id | answer_text
-------------------------
1 | 1 | Nothing
2 | 1 | Something
3 | 2 | Mike
4 | 2 | Steve
5 | 2 | Jon
6 | 3 | Yup
7 | 3 | Nope
我想用他们的答案输出一个随机问题。因此,如果我有 50 行,例如,我可以选择前 3 行,它会输出 3 个随机问题,无论答案有多少。
这是我一直在使用的查询,但是当我使用 TOP(2) 时,它只获取前 2 个答案而不是前 2 个问题:
查询:
SELECT TOP(2) q.q_id, q.question_text, a.answer_text
FROM question q
INNER JOIN answers a ON q.q_id= a.q_id
当前结果:
2 | Who are you? | Mike, Steve
预期结果:
1 | What am I doing? | Nothing, Something
3 | Who are you? | Mike, Steve, Jon
【问题讨论】:
-
如果您尝试随机选择问题,为什么要使用TOP?这总是会给你同样的三个问题。
-
我完全不明白你的问题。您的示例查询将输出 2 行,而不是 1 行,并且
'Nothing, Something'不在您的answer_text的示例值中。 -
我同意,您实际上是希望每个答案占一行,还是希望每个问题的一行中所有可能答案的串联字符串?
-
我认为您需要使用 for xml path 将多行合并为一个(对于所有答案),然后使用 a 到 order by newID() 然后您的前 2 个就可以了。
-
我对你的问题感到困惑。你想要 3 个随机问题,每个问题都有 3 个随机答案吗?如果您从测试库构建测试,这很常见
标签: sql sql-server