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
或将此条件添加到 JOIN
的 ON
子句中。
我正在尝试 运行 在 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
或将此条件添加到 JOIN
的 ON
子句中。