SQL:保留返回值的顺序

时间:2011-07-08 16:26:13

标签: sql tsql sybase

如果我将以下SQL语句提交给数据库:

SELECT setting_value 
  FROM dba.system_settings 
 WHERE setting_name = 'RequestWebServiceURL' 
    OR setting_name = 'UNITS' 
    OR setting_name = 'FACTOR'

我按此顺序获得结果:

setting_value
---------------
www.requestURL 
1 
degrees

即使我在SQL中的“FACTOR”之前指定了“UNIT”。

然而,该表按setting_name排序,这就是我按此顺序获得结果的原因。可能是一个愚蠢的问题,但保留基于上述查询的结果的顺序?这种情况下的数据库是Sybase。

2 个答案:

答案 0 :(得分:3)

ANSI意味着在ORDER BY子句中使用CASE表达式:

  SELECT setting_value 
    FROM dba.system_settings 
   WHERE setting_name IN ('RequestWebServiceURL', 'UNITS', 'FACTOR')
ORDER BY CASE setting_name
           WHEN 'RequestWebServiceURL' THEN 1
           WHEN 'UNITS' THEN 2
           WHEN 'FACTOR' THEN 3
           ELSE 4
         END

ORDER BY子句是保证结果集顺序的唯一方法。否则,您可能会看到广告订单。

答案 1 :(得分:2)

对于结果的排序(当你没有明确地请求它时),SQL通常几乎没有保证,特别是在涉及索引时。

如果订单对您很重要,请随意添加order by子句,例如在主键上(这似乎是您尝试订购的内容)。