【问题标题】:SQL: Is results order mapped to values in 'IN' expression?SQL:结果顺序是否映射到“IN”表达式中的值?
【发布时间】:2011-11-08 17:22:30
【问题描述】:

我有一个记录 ID 列表,我想从 SQL Server 2008 中的表中检索单个值。

我的查询是:

SELECT TestResult.FailureDetails FROM TestResult WHERE TestResult.ID IN (1,2,3,...)

“IN”表达式包含数百个 ID。 ID 列是表的主键。

如果我的桌子是这样的:

ID    Value
1     A
2     B
3     C

我总是会得到按“IN”表达式中出现顺序排列的结果吗?如果没有,我正在考虑这样做:

SELECT TestResult.ID, TestResult.FailureDetails FROM TestResult WHERE TestResult.ID IN (1,2,3,...)

【问题讨论】:

  • 您是否总是希望按照您的示例按ID 的顺序排列,还是需要支持任意顺序?
  • 按照 ID 的顺序就可以了。根据下面的答案,我现在也在选择 TestResult.ID。

标签: sql


【解决方案1】:

不,您不会总是根据IN 按顺序获得结果。

要明确,并添加一个ORDER BY 子句。

SELECT FailureDetails 
FROM TestResult 
WHERE ID IN (1,2,3,...) 
ORDER BY ID;

【讨论】:

    【解决方案2】:

    如果它们是按IN 子句排序的,我会感到惊讶。由于您没有ORDER BY,因此您可能会按 PK 顺序获得结果,但我也不会依赖它。

    如果顺序很重要,您应该明确设置:

    SELECT TestResult.ID, TestResult.FailureDetails FROM TestResult WHERE TestResult.ID IN (1,2,3,...)
    ORDER BY TestResult.ID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 2018-12-21
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 2013-01-14
      相关资源
      最近更新 更多