冻结世界 2023-11-24 10:40 采纳率: 20%
浏览 6

order by rand() limit 1,放在子查询出现多种结果

想通过“order by rand() limit 1”,随机获取一条数据,但在执行以下sql时获取的结果会出现多种情况;
sql:select a.column1 from table1 a where a.column1 = (select column1 from table2 order by rand() limit 1);(table2中无空数据,table1中包含table2中的所有数据)
结果一:查询结果为空

img

结果二:查询结果为多条数据

img

结果三:查询结果正常

order by rand() limit 1 放在子查询是有什么问题么?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-24 12:27
    关注

    【相关推荐】



    • 这篇博客: SQL注入之order by注入与limit注入中的 4.基于rand()的盲注(数字型) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      rand() 函数可以产生随机数介于0和1之间的一个数

      当给rand() 一个参数的时候,会将该参数作为一个随机种子,生成一个介于0-1之间的一个数,

      种子固定,则生成的数固定

      order by rand:这个不是分组,只是排序,rand()只是生成一个随机数,每次检索的结果排序会不同

      order by rand(表达式)
      

      当表达式true和false时,排序结果是不同的,所以就可以使用rand()函数进行盲注了。
      例:

      order by rand(ascii(mid((select database()),1,1))>96)
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月24日