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


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

    但是在连接完之后有个根据时间筛选功能,于是我加了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

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

  • 相关阅读:
    JVM(7) Java内存模型与线程
    JVM(6) 字节码执行引擎
    JVM(5) 类加载机制
    JVM(4) 类文件结构
    JVM(3) 垃圾收集器与内存分配策略
    python的with
    python http server handle json
    c++文件读写
    python字符串处理
    python decorator
  • 原文地址:https://www.cnblogs.com/zmc-change/p/5689956.html
Copyright © 2020-2023  润新知