Ограничение H2 и смещение, есть ли гарантия при заказе?

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

 * цена * | *товар*
---------------------
  2.99 | зеленая шляпа
  2.99 | розовый шляпа
  3.99 | красный мяч
  3.99 | синий шар
  3.99 | желтый шар

Если:

SELECT FROM toys ORDER BY price ASC LIMIT 3;

возвращает:

 * цена * | *товар*
---------------------
  2.99 | зеленая шляпа
  2.99 | розовый шляпа
  3.99 | красный мяч

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

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

возвращает:

 * цена * | *товар*
---------------------
  3.99 | синий шар
  3.99 | желтый шар

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

1 ответ

Решение

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

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

SELECT FROM toys ORDER BY price, product LIMIT 3;

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

Другие вопросы по тегам