首页天道酬勤利用递归方法求5!,sql查询语句执行顺序过程

利用递归方法求5!,sql查询语句执行顺序过程

张世龙 05-12 18:06 98次浏览

契机是朋友向学习小组提出了问题。 大概是这样的意思。

首先,用时间函数减去表中的ARRIVE_TIME,然后检索所需的数据

例如,想查找表中ARRIVE_TIME从今天开始两天的数据

我的第一个反应是

很遗憾,select *,datediff(now ),bbd.ARRIVE_TIME ) daysfrommappertest.bs _ business _ detailsbdwherebbd.days=2

那为什么呢? 不是检测到了days吗? 为什么不能用where判断?

之后,去百度调查sql关键字的执行顺序时,似乎得出了答案。 (引用: https://blog.csdn.net/QQ _ 36381855/article/details/80051265 )

where原本在选择之前运行,意味着where之后的条件。 这些字段必须是上一个表中已经存在的字段或行内表中的字段,而不是用某种函数、方法计算的字段。 where找不到。

如果必须使用where进行查询,我个人的理解是将查询的数据构建为临时表,然后在临时表中进行搜索。 代码如下。

select*from(select*,datediff ) now ),bbd.ARRIVE_TIME ) daysfrommappertest.bs _ business _ details BD ) t whihide

但是,这个方法看起来总是很重。 群友提供了新的解决方案:

select*,datediff(now ),bbd.ARRIVE_TIME ) daysfrommappertest.bs _ business _ detailsbdhavingdays=628

结果已成功,但如上图所示,having的执行顺序也早于select,并且逻辑上与where关键字一样,报告找不到相应列中的错误。 那么,为什么能做到呢?

MySQL提供了此方案的附加解决方案。 有关详细信息,请参阅官方文档https://dev.MySQL.com/doc/ref man/5.7/en/select.html

sql里面and和or的优先级,java线程优先级设置 sql数据库基本语句,sql查询语句执行顺序过程