Oracle left join 查询 结果偏少

本文探讨了一个关于SQL左连接(left join)操作中数据数量不匹配的问题,详细分析了原因并给出了修正后的查询语句。通过调整WHERE子句的位置和使用子查询的方法,解决了原始查询中返回的数据行数少于预期的问题。
select t.instanceid,
       t1.related_ne6,
       t1.related_ne5,
       t1.school_name,
       t.cover_type,
       'LTE' as net_type,
       t1.resname,
       t1.lac,
       t1.ci,
       t1.cell_id,
       '重庆' as area,
       '' as elses
  from  temp_school_zhc t1
 left join uia_date_eutrancell t
    on  t1.ci||t1.cell_id=t.enodeb_id||t.eutrancell_id
  /*  t.enodeb_id = t1.ci
   and t.eutrancell_id = t1.cell_id*/
 where t.uia_time_id = 20150526
 and t1.instanceid is null;
 --and t1.ci||t1.cell_id is null;
 --and t1.ci||t1.cell_id=160712


temp_school_zhc 表中instanceid为空的有2405条,可是查询结果之后只有2155条。left join之后为什么查询出来的数据偏少,原因为 where子句将left join之后的结果过滤掉了一部分。更改为如下之后查询的结果变为2405条了。


select t.instanceid,
       t1.related_ne6,
       t1.related_ne5,
       t1.school_name,
       t.cover_type,
       'LTE' as net_type,
       t1.resname,
       t1.lac,
       t1.ci,
       t1.cell_id,
       '重庆' as area,
       '' as elses
  from  (select * from temp_school_zhc t where t.instanceid is null) t1
 left join (select * from uia_date_eutrancell t where t.uia_time_id = 20150526) t
    on  t1.ci||t1.cell_id=t.enodeb_id||t.eutrancell_id
  /*  t.enodeb_id = t1.ci
   and t.eutrancell_id = t1.cell_id*/
-- where t.uia_time_id = 20150526
 
 --and t1.ci||t1.cell_id is null;
 --and t1.ci||t1.cell_id=332111


    虽然按照oracle的方式,where语句从下往上执行,可是执行的结果还是按照人的思维从上往下执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值