SQL: сохранение порядка возвращаемых значений - PullRequest
1 голос
/ 08 июля 2011

Если я отправлю следующий оператор 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

Даже если я указал "UNIT" перед "FACTOR"в SQL.

Таблица, однако, отсортирована по параметру setting_name, поэтому я получил результаты в этом порядке.Может быть, глупый вопрос, но порядок результата, основанного на вышеупомянутом запросе, будет сохранен?База данных в этом случае Sybase.

Ответы [ 2 ]

3 голосов
/ 08 июля 2011

ANSI означает использование выражения CASE в предложении 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

Предложение ORDER BY является единственным средством гарантирования порядка набора результатов.В противном случае вы, скорее всего, увидите порядок вставки.

2 голосов
/ 08 июля 2011

SQL в целом дает очень мало гарантий, когда дело доходит до упорядочения результатов (когда вы явно не запрашиваете его), особенно когда дело касается индексов.

Если порядок важен для вас, почувствуйтеВы можете свободно добавить предложение order by, например, к первичному ключу (кажется, это то, что вы пытаетесь заказать).

...