首页 > 数据库技术 > 详细

sql语句中出现笛卡尔乘积

时间:2017-01-09 11:29:59      阅读:201      评论:0      收藏:0      [点我收藏+]

没有join条件导致笛卡尔乘积

      学过线性代数的人都知道,笛卡尔乘积通俗的说,就是两个集合中的每一个成员,都与对方集合中的任意一个成员有关联。可以想象,在SQL查询中,如果对两张表join查询而没有join条件时,就会产生笛卡尔乘积。这就是我们的笛卡尔乘积导致的性能问题中最常见的案例:开发人员在写代码时遗漏了join条件。

 

发生笛卡尔乘积的sql:

[sql] view plain copy
 
  1. select sum(project_fj.danjia*project_fj.mianji) from project_fj,orderform where project_fj.zhuangtai=‘未售‘ and project_fj.project_id=30   


 

这个语句其实只是sql语句的一部分,问题是另一部分用到了表orderform,所以from中有orderform,但是上面的这部分语句完全没有用到orderform,但是不设置条件就导致了笛卡尔乘积。

 

解决方法:使用LEFT JOIN

[sql] view plain copy
 
  1. select sum(project_fj.danjia*project_fj.mianji) from project_fj LEFT JOIN orderform ON project_fj.id=orderform.project_id  
  2.  where project_fj.zhuangtai=‘未售‘ and project_fj.project_id=30   

sql语句中出现笛卡尔乘积

原文:http://www.cnblogs.com/lupeng2010/p/6264110.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!