我犯过的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来查询
天行健君子以自强不息。