如果我将以下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。
答案 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
子句,例如在主键上(这似乎是您尝试订购的内容)。