我犯过的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来查询
浙公网安备 33010602011771号