下面是我的查询。
select * from tblQuestionTable where Paper='HTML' and QuestionId in (select QuestionId from tblTestOverview where TestId=1)
子查询提供未排序的结果集,但在查询第二个选择后,结果将被排序。如何以与子查询相同的顺序获得结果。
答案 0 :(得分:2)
您的查询正在使用的任何数据集默认为无序,无论是物理表还是派生表。在实际执行查询时,服务器用于从中读取行的顺序是不受控制。这意味着您无法可靠地将订单指定为“与该子查询中的相同”。相反,为什么不考虑特定订单并在主查询中使用ORDER BY明确指定它?例如,像这样:
SELECT *
FROM tblQuestionTable
WHERE Paper='HTML'
AND QuestionId IN (SELECT QuestionId FROM tblTestOverview WHERE TestId=1)
ORDER BY QuestionId
;
话虽如此,可能接近你想要的东西。 ROW_NUMBER函数以未确定的顺序(ORDER BY (SELECT 1)
)为派生数据集分配行号。它可能是也可能不是服务器读取行的顺序,但您可以使用指定的值来排序最终结果集:
SELECT q.*
FROM tblQuestionTable AS q
INNER JOIN (
SELECT
QuestionId,
rn = ROW_NUMBER() OVER (ORDER BY (SELECT 1))
FROM tblTestOverview
WHERE TestId = 1
) AS o
ON o.QuestionId = q.QuestionId
ORDER BY o.rn ASC
;
答案 1 :(得分:-1)
选择tblQuestionTable的结果默认情况下将根据其主索引进行排序,除非指定。 tblTestOverview选择结果也是一样的。因此,您需要在tblQuestionTable的select查询中包含来自tblTestOverview表的主索引键feild,并根据该字段指定order by子句。