SQL:保留返回值的顺序
如果我向数据库提交以下SQL语句:SQL:保留返回值的顺序,sql,tsql,sybase,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 尽管我
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”
然而,表是按设置_name排序的,这就是为什么我按这种顺序得到结果。这可能是一个愚蠢的问题,但基于上述查询的结果顺序是否可以保留?在这种情况下,数据库是Sybase。SQL通常在结果排序方面(当您没有明确请求时)几乎没有保证,特别是在涉及索引时
如果顺序对您很重要,可以随意添加一个
order by
子句,例如在主键上(这似乎是您试图对其进行排序的内容)。通常,SQL在结果排序方面(当您没有显式请求时)几乎没有保证,特别是在涉及索引时
如果顺序对您很重要,请随意添加一个
order by
子句,例如在主键上(这似乎就是您试图订购的内容)。ANSI的方法是在order by
子句中使用大小写表达式:
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
orderby
子句是保证结果集顺序的唯一方法。否则,您可能会看到插入顺序。ANSI的方法是在order BY
子句中使用大小写表达式:
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
orderby
子句是保证结果集顺序的唯一方法。否则,您可能会看到插入顺序。如果您意识到其中X=a或X=b或X=c
是其中X in(a,b,c)
的扩展,您可以找到大量重复的问题来实现这种顺序。如果您意识到其中X=a或X=b或X=c
是其中X in的扩展(a、b、c)
,您可以找到大量重复的问题来实现这种排序。