利用递归方法求5!,sql查询语句执行顺序过程
契机是朋友向学习小组提出了问题。 大概是这样的意思。
首先,用时间函数减去表中的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