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

朝阳做网站的公司营销网站建设价格

朝阳做网站的公司,营销网站建设价格,廊坊企业建站,网站后台banner怎么换最近在项目中遇到一个问题,感觉有点意思,在解决问题及查阅了相关资料后,打算写篇文章给朋友们分享一下。 问题现象: 问题是很常见的空指针问题,后端查询数据库数据,遍历进行相关业务处理时报空指针。通过…

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

问题现象:

问题是很常见的空指针问题,后端查询数据库数据,遍历进行相关业务处理时报空指针。通过断点调试发现问题就出在查询回来的数据上,返回的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.zhongyajixie.com/news/51705.html

相关文章:

  • 网站开发 c经营管理培训课程
  • 虚拟主机怎么建网站郑州seo服务技术
  • 给酒吧做网站关系网站优化公司
  • 如何通过c语言来做网站自己做网站需要多少钱
  • 免费素材网站设计南昌seo专业团队
  • 网络宣传网站建设定制全网关键词搜索排行
  • 购物网站策划建设方案上海优化排名网站
  • 如何做实体店的网站网站排名优化公司
  • 淘宝联盟合作网站api百度地图在线查询
  • 上海网站设计公司十大软件培训机构
  • 网站源码防盗原理网站收录查询系统
  • 做兼职网站哪个靠谱永久免费linux服务器
  • 企业网站数防泄露怎么做工具站seo
  • 网站域名实名认证怎么做seo是做什么工作的
  • 小众做的好的网站班级优化大师怎么用
  • 安装wordpress要数据库吗对网站外部的搜索引擎优化
  • 做酒店网站设计服务营销的七个要素
  • 有做a50期货的网站seo网络优化师
  • 自己怎么制作海报图片网站优化策划书
  • 织梦网站上传保存文档站外推广怎么做
  • 佛山网站推广市场免费做网站自助建站
  • 为什么做织梦网站时图片出不来友链购买
  • 脑卒中中心建设网站百度下载免费
  • 网站建设费的会计处理电商网站开发需要多少钱
  • 浙江网站搭建会计培训班初级费用
  • 女和男做搞基视频网站中央新闻
  • php网站的优势西安建站推广
  • 参加网站建设项目人员保障体系湖南网站seo找行者seo
  • 网站建设框架模板下载沧州网站建设公司
  • wordpress怎么去掉谷歌字体seo关键词是怎么优化的