【已解决】嵌套查询里层不指定limit时, 会出现排序规则失效, 且每次返回的结果都是随机的问题

Viewed 53

版本: 2.0.9

现象描述

sql如下, 这种写法是希望用户传过来的sql在没有带limit时给定一个默认值, 但实际测试下来发现不仅会影响原sql的排序规则, 连每次执行的结果都是随机的,

select *
from (select *
      from bz_digit_rolling_billet1
      order by identity desc
      ) as t
limit 20;

执行多次结果如下:
image.png
image.png

当里面sql指定limit时, 结果正常如下:
image.png

临时解决方案(有其他的问题)

通过fe.audit.log查看datagrip提交的sql找到了一个替代实现: 通过使用mysql的sql_select_limit session variable去做(在mysql client中验证有效):

SET SESSION sql_select_limit = 10;
select *
      from bz_digit_rolling_billet1
      order by identity desc;

但这种方式的问题在于如果原sql自己加了更大的limit, 那么session variable中指定的就失效了

问题

有没有其他手段可以在不影响原sql结果的情况下进行行数的limit限制

1 Answers