码迷,mamicode.com
首页 > 其他好文 > 详细

关于left join遇到where就不管用的问题

时间:2016-07-21 00:25:22      阅读:1094      评论:0      收藏:0      [点我收藏+]

标签:

  今天做了个存储过程,需要的功能是查询所有人的得分,有人没分就给零分,显而易见这里用左外连接是没有问题的,

但是在连接完之后有个根据时间筛选功能,于是我加了where条件判断,这时候没有想到的事情发生了,左外连接的作用没有

了,变得和内连接查询一样,没有得分的人不会被查询出来,后来问了人自己想了想,左外连接查询出来的是一个结果集,也

可以说是一张临时表,加上where之后就在查询出来的基础上筛选了一次,自然没有条件外的记录。正确的处理应该是把on后面的

where换成and来在连接的时候就进行查询,下面举一个例子。

下面有两张表

1.stu学生表

技术分享

2.score成绩表

技术分享

比较一下下面两种查询的不同吧!

SELECT s.`name`,IFNULL(c.`score`,0) AS score FROM stu s LEFT JOIN score c ON s.`id` = c.`stu_id` WHERE score > 50

这种是先查询出结果集再筛选,自然没有小于50的记录

技术分享

SELECT s.`name`,IFNULL(c.`score`,0) AS score FROM stu s LEFT JOIN score c ON s.`id` = c.`stu_id` AND score > 50

这种是先再筛选查询出结果集,就可以查询出所有记录

技术分享

 

关于left join遇到where就不管用的问题

标签:

原文地址:http://www.cnblogs.com/zmc-change/p/5689956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!