我犯过的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来查询

你可能感兴趣的:(sql)