我正在尝试在2个表上运行左连接。我没有一个小组,我唯一的条件是在第二张桌子上。但是,返回的行少于第一个表。是不是左连接假设从第一个表中带来所有数据? 这是我的SQL:
select *
from tbl_a A left join tbl_b B
ON
A.Cnumber=B.Cnumber
and A.CDNUmber=B.CDNumber
and abs(A.duration - B.Duration)<2
and substr(A.text,1,3)||substr(A.text,5,8)||substr(A.text,9,2)=substr(B.text,1,8)
where B.fixed = 'b580'
表A中有140,000条记录,但返回的结果少于100,000条记录。有什么问题,如何解决?
答案 0 :(得分:4)
只要在引用右表的WHERE
子句中放置一个条件,并且不能容纳在连接失败时将生成的NULL
,你就转换了它(有效地)回到INNER JOIN
。
尝试:
where B.fixed = 'b580' OR B.fixed IS NULL
或者将此条件添加到ON
的{{1}}子句中。
答案 1 :(得分:0)
您应该将where子句添加到连接中:
select *
from tbl_a A left join tbl_b B
ON
A.Cnumber=B.Cnumber
and A.CDNUmber=B.CDNumber
and abs(A.duration - B.Duration)<2
and substr(A.text,1,3)||substr(A.text,5,8)||substr(A.text,9,2)=substr(B.text,1,8)
and B.fixed = 'b580'
如果您在州政府所在地使用b不存在的所有记录将不会返回。