示例查询
SELECT * FROM Table WHERE ID in (5,3,4)
我如何调整此查询,以便返回条目的顺序遵循 ID 的输入(IE,5 第一,3 第二,4 第三)。
编辑 - 要清楚 ID 是一个按正确顺序动态生成的列表。
示例查询
SELECT * FROM Table WHERE ID in (5,3,4)
我如何调整此查询,以便返回条目的顺序遵循 ID 的输入(IE,5 第一,3 第二,4 第三)。
编辑 - 要清楚 ID 是一个按正确顺序动态生成的列表。
您最好的选择是将列表拆分为临时表。
我正在使用 Jeff Moden 的 DelimitedSplit8k。您可以在此处找到代码。请注意,它包含一个 ItemNumber 列,该列是按顺序排列的值。
这有一个额外的好处,即对于分隔列表中的大量值来说速度更快。
如果您要生成该列表,请尝试生成类似这样的内容:
或者更好:为索引表或变量生成插入值语句,避免对 order by 子句进行排序。仍然可能会有一种用于将行插入表或变量的排序,但这通常比在主查询中更便宜/不太可能溢出。
由于 ID 乱序(不是降序或升序),我将使用 UNION。
作为旁注,
SELECT *
在 UNION 查询中使用不是一个好主意(其余时间,这是值得商榷的)——改用实际的列名。编辑:有人指出这不一定有效;尤其是动态 ID 列表,就像编辑过的问题所指定的那样。