Ограничение 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 база данных может возвращать строки по своему усмотрению. Порядок этих строк также может изменяться во времени.