mysql中where,RAND()在MYSQL的WHERE子句中

我在尝试限制的繁重的删除查询中使用了它,并且它的运行速度很快.

DELETE table1 FROM table1

JOIN table2 ON table2.id = table1.salesperson_id

JOIN table3 ON table3.id = table2.user_id

JOIN table4 ON table3.office_id = table4.id

WHERE table1.type = "Snapshot"

AND table4.id = 113 OR table4.parent_id =113

AND RAND()<=0.001;

我不知道这是如何工作的.我尝试了广泛的谷歌搜索,但是在以这种方式使用的WHERE子句中,我对RAND()找不到任何东西.

这些文档也都没有给出任何信息.

先感谢您.

附:我正在使用MYSQL 5.5

解决方法:

对于您的联接生成的每一行,都会评估WHERE子句中的表达式.

每次表达式调用RAND()时,该函数将返回一个介于0和1之间的不同随机浮点值.如果此随机值等于或小于0.001,则该术语为true.因此,随机数大约为1000行中的1行.这些将是它将删除的行.而1000行中的其他999条将跳过删除.

顺便说一句,我想您希望WHERE子句带有一些括号以强制执行运算符优先级:

WHERE table1.type = "Snapshot"

AND (table4.id = 113 OR table4.parent_id = 113)

AND RAND()<=0.001;

否则,AND绑定比OR绑定更牢固,因此如果没有这些括号,该表达式将像您以这种方式编写的那样工作:

WHERE (table1.type = "Snapshot"

AND table4.id = 113) OR (table4.parent_id =113

AND RAND()<=0.001);

这意味着将删除所有类型为“ Snapshot”且id = 113的行,而将删除1/1000行的parent_id = 113的行,包括某些类型为“ Snapshot”以外的行.

标签:mysql,random

来源: https://codeday.me/bug/20191012/1903890.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值