sql left join返回

时间:2015-01-20 07:12:21

标签: sql left-join conditional-statements records

我正在尝试在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条记录。有什么问题,如何解决?

2 个答案:

答案 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不存在的所有记录将不会返回。