左连接left join 的空数据

本文介绍了一个关于SQL查询的案例,通过调整左连接条件解决了查询结果中出现空值的问题,并给出了正确的SQL语句及其查询结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

select
        T1.serialno,t1.dwmonth,t2.dwmonth,T1.balance,t2.balance as ReportItem
from
        receive_badloan T1 left join a_contract T2 on
        t1.dwmonth=t2.dwmonth and t2.dwmonth='2005/10/31' and
        t1.serialno = t2.serialno and
        t1.businesscurrency = t2.businesscurrency where operateorg like '1011%'.
上面这句sql的要求是:最终显示的余额(balance)来自t2,serialno,dwmonth,businesscurrency是t2的三个主键。看起来这样写好像没问题,但是查询结果如下:
serialno                   t1.dwmonth       t2.dwmonth       t1.balance     reportItem
111998060004        2005-09-30                                  303697.6       
111998060004        2005-10-31        2005-10-31        278697.6        278697.6
,t2.balance有为空的值。查看原因发现 t1.dwmonth=t2.dwmonth为多余的条件,因为现在的要求是查询dwmonth为2005/10/31的余额,如果t1.dwmonth=t2.dwmonth了,则2005-09-30去关联t2 中 t2.dwmonth='2005/10/31'的数据当然 没得关联所以,t2.balance为空。
正确sql应该为:
select
        T1.serialno,t1.dwmonth,t2.dwmonth,T1.balance,t2.balance as ReportItem
from
        receive_badloan T1 left join a_contract T2 on
        t2.dwmonth='2005/10/31' and
        t1.serialno = t2.serialno and
        t1.businesscurrency = t2.businesscurrency where operateorg like '1011%'
正确结果如下:
111998060004        2005-09-30        2005-10-31        303697.6        278697.6
111998060004        2005-10-31        2005-10-31        278697.6        278697.6
左连接并非主键全部要等值起来!
左连接left join)是一种关联查询的方式,它保证左边表的数据都会被查出,不管右表是否有匹配的数据。但是在某些情况下,左连接可能会导致查出的结果比原左表的数据少。 这种情况通常发生在左表的一条数据在右表中有多条匹配的数据时。由于左连接的特性,每一条匹配的数据都会被重复查出,导致最后的结果中左表的数据会出现重复。如果没有进行适当的处理,这些重复的数据可能会导致结果比原左表的数据少。 为了解决这个问题,可以添加一个group by字段,确保该字段具有唯一性。通过对该字段进行分组,可以消除重复的数据,从而保证查出的结果与原左表的数据一致。 举个例子,假设有两个表stu和course,stu表中有学生的信息,course表中有学生的课程信息。如果使用左连接查询学生及其选修的课程数量,并且只查询成绩大于60的课程,可以使用以下SQL语句: SELECT stu.`name`, COUNT(course.id) num FROM stu LEFT JOIN course ON stu.id = course.stu_id WHERE course.score > 60 GROUP BY stu.id 在这个例子中,通过左连接将stu表和course表关联起来,然后使用条件判断筛选出成绩大于60的课程。最后使用group by stu.id对结果进行分组,确保每个学生只出现一次,避免重复的数据。 总结来说,左连接在某些情况下可能会导致查出的结果比原左表的数据少,但可以通过添加group by字段来解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值