业精于勤,荒于嬉。

我犯过的sql错误介绍:外连接,多表查询相关。

ASSESS_FINAL_RESULT表有supplierId,是supplier表的外键
两张表都有deleted字段,表示是否已经被删除。
如下两条语句:

select *
  from supplier s
  left join ASSESS_FINAL_RESULT afr
    on afr.supplier_id = s.supplier_id
   and afr.deleted = 0
 where s.deleted = 0
-------------------
 select *
   from supplier s
   left join ASSESS_FINAL_RESULT afr
     on afr.supplier_id = s.supplier_id
  where s.deleted = 0
    and afr.deleted = 0

  

当ASSESS_FINAL_RESULT表没有字段,或者全部deleted=1(被删除)的状态下,前者可以查询到数据,而后者会查询到0条数据。因为连接之后的虚拟表会有两列deleted字段,并且afr.deleted全部为空。
所以,我们在join表的时候,注意把连接表的限定条件放在join 后面的on上。
把主要查询的表的限定条件放在where上。
如果一定要让两张表形成级联关系,不妨使用inner来查询

posted @ 2012-04-28 11:42  叶知泉  阅读(382)  评论(0编辑  收藏  举报