sql 左加入 returns

sql left join returns

我正在尝试 运行 在 2 table 上进行左连接。我没有分组依据,我唯一拥有的条件是第二个 table。但是,返回的行少于第一个 table。左连接不是应该从第一个 table 中获取所有数据吗? 这是我的 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'

tableA中有14万条记录,但返回的结果不到10万条记录。有什么问题,我该如何解决?

您应该将 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'

如果使用 where statemen,则不会返回 b 不存在的所有记录。

一旦您在 WHERE 子句中放置一个引用正确 table 且不包含连接失败时将产生的 NULL 的条件,您已经(有效地)将其转换回 INNER JOIN.

尝试:

where B.fixed = 'b580' OR B.fixed IS NULL

或将此条件添加到 JOINON 子句中。