当前位置: 首页 > news >正文

汽车网站策划书个人服务平台

汽车网站策划书,个人服务平台,什么查看WordPress的用户名及密码,wordpress 博客标题最近在项目中遇到一个问题,感觉有点意思,在解决问题及查阅了相关资料后,打算写篇文章给朋友们分享一下。 问题现象: 问题是很常见的空指针问题,后端查询数据库数据,遍历进行相关业务处理时报空指针。通过…

最近在项目中遇到一个问题,感觉有点意思,在解决问题及查阅了相关资料后,打算写篇文章给朋友们分享一下。

问题现象:

问题是很常见的空指针问题,后端查询数据库数据,遍历进行相关业务处理时报空指针。通过断点调试发现问题就出在查询回来的数据上,返回的List集合中有一条空数据导致的。
在这里插入图片描述
就很纳闷,怎么会返回空数据?

继续排查

发现sql执行完确实有一行空数据,先给兄弟们看一下sql(业务代码不便透露这里进行了简化,主要复现问题):

SELECTo.order_id,o.order_no,o.detail_id,o.product_id,o.batch,o.comp_brand_id,o.supplier_id,o.buyer
FROMtr_production_purchase_contract_and_order contractOrderLEFT JOIN t_daily_purchase_order o ON contractOrder.order_id = o.order_id AND contractOrder.contract_id = '1585249657636917248' AND contractOrder.del_flag = '0'

大概意思就是关联搜索contract_id = '1585249657636917248’的数据,执行结果显示contractOrder.contract_id = ‘1585249657636917248’ AND contractOrder.del_flag = '0’条件没有生效。
在这里插入图片描述
为啥不生效?第一反应写错了,仔细检查没有问题。于是怀疑left join on后面加条件是不是有什么特殊的,查完资料,还确实非常特殊。join on后面加条件与where条件是不一样的。

先给结论:

  • left join
    on后面条件筛选是对2张表生成的全连接(笛卡尔积)临时表进行的筛选,无论on后面的条件是否满足都会返回左表的所有数据,不符合条件的右表的值都为null

  • right join
    同上,只不过是最终返回右表的所有数据,不符合条件的左表的值都为null

  • inner join
    inner join有点不一样,它是两张表取交集,最终的结果是符合所有条件的值,所以on后面的条件可以生效

  • where
    查询出来的结果最后都会再经过where条件进行过滤,满足条件才会返回

由此可见left join 的时候,on后面对左表的数据加筛选条件是没有用的。上面问题的原因也找到了因为只查询了右表的值,因为不满足条件,所以查询回来的数据为空。

为了验证这个观点,我们进行一下测试:
员工表
在这里插入图片描述
部门表
在这里插入图片描述
left join 单条件查询

select 
t.emp_id,
t.name,
t.age,
d.dept_id,
d.dept_name
from t_emp t
left join t_dept d on t.dept_id = d.dept_id

在这里插入图片描述
on 后面加条件

select 
t.emp_id,
t.name,
t.age,
d.dept_id,
d.dept_name
from t_emp t
left join t_dept d on t.dept_id = d.dept_id and t.emp_id = '4';

在这里插入图片描述
把on的所有条件作为匹配条件,不符合的右表都为null

where 后面加条件

select 
t.emp_id,
t.name,
t.age,
d.dept_id,
d.dept_name
from t_emp t
left join t_dept d on t.dept_id = d.dept_id where t.emp_id = '4';

在这里插入图片描述
匹配完再筛选,结果只有一条记录。

inner join 多条件查询

select 
t.emp_id,
t.name,
t.age,
d.dept_id,
d.dept_name
from t_emp t
inner join t_dept d on t.dept_id = d.dept_id where t.emp_id = '4';

在这里插入图片描述
总结:

在连表操作的时候,其实是先进行了2表的全连接(笛卡尔积,也就是所有能组合的情况a.rowCount*b.rowCount),然后根据on后面的条件进行筛选,最后如果是左连接或者右连接,再补全左表或者右表的数据。

个人理解不一定正确,欢迎指正

参考文章:
join on多个条件的理解

http://www.yayakq.cn/news/549885/

相关文章:

  • 给网站做优化刷活跃要收费吗三把火科技网站设计
  • 大学网站建设评比考核办法品牌创意型网站开发
  • 网站开发流程进度规划产品设计排名
  • 网站路径优化怎么做搭建网站的价格
  • 企业网站管理系统最新4湖南岚鸿牛x1 0ai做图标教程网站
  • 山东卓创 网站建设珠海网站建设的公司
  • 城乡建设部网站混凝土7天强度个人网站建设基本教程
  • 河北pc端网站建设淄博手机网站建设费用
  • 网站建设管理权限网站域名怎么修改
  • 桃源县建设局网站网站后台账户如何做会计分录
  • 岳阳网站制作购物网站开发思路
  • 简述营销网站建设包含哪些内容搭建 wiki wordpress
  • 企业门户网站的意义怎么用云服务器做网站
  • 小程序开发专业定制优化外包服务公司
  • 桂林象鼻山离哪个高铁站近企信网查询官网
  • 长沙模板建站源码新网站建设信息
  • 青岛做网站的费用医药网站开发
  • 好用的h5网站模板加强网站编辑队伍建设
  • 吐鲁番高端网站建设平台中小微企业纳税申报
  • 用wordpress建医疗网站wordpress 交叉导航
  • 有没有做ppt好看的免费网站网站去版权
  • 设计的网站都有哪些内容个人网站制作方法
  • 如何写网站开发需求文档网页设计排版布局技巧
  • amp网站建设个人网页设计作品模板简单
  • 向国旗敬礼做美德少年网站seo优化与品牌官网定制
  • 山东网站备案注销wordpress标题后缀
  • 廊坊网站建设公司哪家好如何做网站架构
  • 手机网站建设与布局手机界面设计素材
  • 个人备案挂企业网站wordpress手机编辑
  • 重庆公司印章代码查询seo是啥意思