当前位置: 首页 > 后端技术 > PHP

mysql查询条件placingon和where的区别

时间:2023-03-29 20:49:10 PHP

介绍今天在写SQL的时候,遇到了一个问题。需求是这样的,查询数据,按照评分倒序和最近一周的访问量倒序排序。问题是常规的写法,把day>=xxx的条件放在where里,如果某个数据在过去一周没有流量,那么这个数据就查不到了。解决方案是将条件放在LEFTJOIN中。MySQL语句的执行顺序先解释一个概念。MySQL语句的执行顺序与SQL语句的顺序不一致。下面是SQL示例SELECTDISTINCTFROMJOINONWHEREGROUPBYHAVINGORDERBYLIMIT如下是执行SQLOrderFROMONJOINWHEREGROUPBYHAVINGSELECTDISTINCTORDERBYLIMITLEFTJOIN结果集的效果是不一样的,不仅和SQL的优先级有关,还和LEFTJOIN有关。使用leftjoin时,on之后的条件只对右表有效。on是生成临时表时使用的条件,无论on条件是否起作用,返回左表(table_name1)的行。where是生成临时表后使用的条件。此时不管是否使用leftjoin,只要条件不为真,所有行都被过滤掉。以上摘自两份资料,可以很好的总结(原文链接在下面,还有例子)。参考资料:循序渐进:MySQLArchitectureOverview->QueryExecutionProcess->SQLParsingOrder,MySQLleftjoin操作中on和where放置条件的区别,SQL中on和where过滤条件的区别。