MYSQL学习二 关于左连接
工作中有如下的SQL, 针对A.ID ='abcdefg'(假设DB中存在A.ID ='abcdefg'这条纪录), left join B和C两个表,来查找其他信息。就算是B和C中没有任何满足条件的记录,最后结果也肯定不是空。因为A.ID ='abcdefg'是存在的。
SELECT ******
FROM tableA A
LEFT JOIN tableB B on b.DELETED = ''
AND A.DELETED = ''
AND B.fid=A.ID
LEFT JOIN tableC C ON B.XXXid=C.id AND c.DELETED = ''
WHERE A.ID ='abcdefg'
一开始我的写法是这样的: 把 b.DELETED = '0'放在后面,这样导致结果为null, 这是因为: 如果把and b.DELETED = '0' 放在最后,是对left join后的结果做过滤,
这个时候就有可能导致结果为null。(考虑这种情况: B和C表没有能和A连接成功的记录,如果用上面的SQL,会出结果,用这个SQL,就会null)
SELECT ******
FROM tableA A
LEFT JOIN tableB B on
AND A.DELETED = ''
AND B.fid=A.ID
LEFT JOIN tableC C ON B.XXXid=C.id AND c.DELETED = ''
WHERE A.ID ='abcdefg' and b.DELETED = ''
上面这个问题是工作中遇到的,一不小心浪费了好多时间来fix, SQL掌握的不好!
MYSQL学习二 关于左连接的更多相关文章
- MySQL学习笔记之左连接
MySQL的左连接 #左连接,以左表为基表 select class1.stuid,class1.stuname,sex,course from class1 left join course on ...
- MySQL学习笔记——多表连接和子查询
多表连接查询 # 返回的是两张表的乘积 SELECT * FROM tb_emp,tb_dept SELECT COUNT(*) FROM tb_emp,tb_dept # 标准写法,每个数据库都能这 ...
- Oracle学习笔记—Oracle左连接、右连接、全外连接以及(+)号用法(转载)
转载自: Oracle左连接.右连接.全外连接以及(+)号用法 对于外连接,Oracle中可以使用“(+)”来表示. 关于使用(+)的一些注意事项: (+)操作符只能出现在WHERE子句中,并且不能与 ...
- 【mysql 优化 5】左连接和右连接优化
原文地址:8.2.1.8 Left Join and Right Join Optimization mysql以下列方式实现一个A left join B 连接条件: 1,表B设置为依赖于表A和A所 ...
- mysql学习之路_连接查询
回顾 列属性:主键,自增长,唯一键. 关系:一对一,一对多,多对多 三层范式: 1NF:字段设计必须符合原子性 2NF:不存在部分依赖(没有复合主键) 3NF:不存在传递依赖(实体单独成表) 逆规范化 ...
- mysql执行顺序及左连接和右连接
SELECT语句执行顺序 SELECT语句中子句的执行顺序与SELECT语句中子句的输入顺序是不一样的,所以并不是从SELECT子句开始执行的,而是按照下面的顺序执行: 开始->FROM子句-& ...
- MySql学习(二) —— where / having / group by / order by / limit 简单查询
注:该MySql系列博客仅为个人学习笔记. 这篇博客主要记录sql的五种子句查询语法! 一个重要的概念:将字段当做变量看,无论是条件,还是函数,或者查出来的字段. select五种子句 where 条 ...
- MySQL学习(二)
1 增删改查是针对表来说的. 2 创建一个表 mysql> create table stu( -> id int primary key auto_increment, -> sn ...
- MySQL学习笔记之右连接
MySQL的右连接 #右连接,以右表为基表 select course.stuid,course.stuname,sex,course,city from class1 right join cour ...
随机推荐
- JS常见事件以及函数
1.js enter键激发事件 document.onkeydown = function (e) { if (!e) e = window.event; ...
- MySQL数据库的常见操作(七)
MySQL数据库的常见操作 1.创建数据库 2.创建重名的数据库以及如何查看警告信息 3.设置数据库的编码方式(默认为utf8) 4.修改和查看数据库的编码方式 5.删除数据库 6.6.删除已经删除了 ...
- 11 redis之rdb快照持久化
一:Redis持久化配置 Redis的持久化有2种方式[快照,是日志] 二:Rdb快照的配置选项 save 900 1 // 900内,有1条写入,则产生快照 save 300 1000 // 如果3 ...
- 2014年java软件project师面试题收集
如果页面中于五个li标签.写个js使点击每个li返回他的index <!doctype html> <html> <head> <style> li{c ...
- 关于Gradle和Gradle插件的问题
一. Gradle更新插件问题 当更新Andorid studio 的时候,你可能会接收到一条让你更新Gradle插件到最新版本的建议.在项目编译需要的基础上,你可以选择接受或者手动选择一个具体的 ...
- 配置springMVC时出现的问题
配置springMVC时出现的问题 项目结构如图:
- Greedy Function Approximation:A Gradient Boosting Machine
https://statweb.stanford.edu/~jhf/ftp/trebst.pdf page10 90% to 95% of the observations were often de ...
- Vector 源码阅读
Vector在功能上与ArrayList是类似的,实现的数据结构也是一样的.但Vector是线程安全的,ArrayList是线程不安全的.
- 题解 CF97C 【Winning Strategy】
题解 CF97C [Winning Strategy] 此题是某平台%你赛原题,跟大家分享一下某校zsy和sxr等同学的神仙做法. 我解释一下题意,大是说,我有[无限]个人,每个人可以对他" ...
- python cookbook第三版学习笔记二:字典
一般来说字典中是一个键对应一个单值的映射,如果想一个键值映射多个值,那么就需要将这些值放到另外的容器中,比如列表或者集合. 比如d={'a':[1,2]} Collections中的defaultdi ...