Ограничение H2 и смещение, есть ли гарантия при заказе? - PullRequest
0 голосов
/ 29 июня 2018

При использовании LIMIT и OFFSET, каковы гарантии того, что каждый такой оператор упорядочит входные данные одинаково? Для иллюстрации:

 *price* | *product*
---------------------
  2.99   | party hat green
  2.99   | party hat pink
  3.99   | red ball
  3.99   | blue ball
  3.99   | yellow ball

Если:

SELECT FROM toys ORDER BY price ASC LIMIT 3;

возвращается:

 *price* | *product*
---------------------
  2.99   | party hat green
  2.99   | party hat pink
  3.99   | red ball

Могу ли я быть уверен в следующем запросе:

SELECT FROM toys ORDER BY price ASC LIMIT 3 OFFSET 3;

возвращает:

 *price* | *product*
---------------------
  3.99   | blue ball
  3.99   | yellow ball

В конце концов, все три шара имеют одинаковую цену, поэтому любой порядок трех рядов действителен.

1 Ответ

0 голосов
/ 29 июня 2018

Если присутствует ORDER BY, база данных может возвращать эквивалентные строки (в соответствии с критериями упорядочения) в любом порядке, и этот порядок может изменяться со временем.

В вашем примере, если вы хотите, чтобы строки были в определенном порядке, просто укажите это. Может быть:

SELECT FROM toys ORDER BY price, product LIMIT 3;

Если не указано ORDER BY, база данных будет возвращать строки в произвольном порядке. В соответствии с определением SQL база данных может свободно возвращать строки по своему усмотрению. Порядок этих строк также может изменяться во времени.

...