oracle 三表关联查询 union all和left join 的运用问题详解(仅代表个人)

博客详细分析了在Oracle中处理三表关联查询时遇到的问题,初始使用简单的请求ID关联导致结果错误。通过尝试LEFT JOIN和GROUP BY未能解决问题,最终在指导下采用UNION ALL解决,但遇到WHERE条件不生效和数据合并的困扰。通过在SELECT语句中添加NULL占位,成功得到正确结果,展示了在复杂SQL查询中可能遇到的挑战和解决策略。
摘要由CSDN通过智能技术生成

需求: 现有三张表, oa_fund_plan(简称a)、oa_fund_plan_in(简称b)、oa_fund_plan_out(简称c)

a为主表, 通过requestid与b和c相关联,其中b和c之间的数据没有任何对应关系,但是有一个列名同为amount的列.

刚开始,我只是通过简单的requestid将a与bc相关联

sql如下

SELECT distinct( 
    oa_fund_plan.depmentname) ,
    oa_fund_plan.operatorname ,
    oa_fund_plan_in.amount ain,
    oa_fund_plan_out.amount aout,
    oa_fund_plan_in.colltype ,
    oa_fund_plan_out.paytype ,
    oa_fund_plan.billdate  
FROM
    oa_fund_plan ,
    oa_fund_plan_in ,
    oa_fund_plan_out  
WHERE   
    and oa_fund_plan.requestid = oa_fund_plan_in.requestid 
    and oa_fund_plan.requestid = oa_fund_plan_out.requestid

我没发现任何问题,但是我们组长发现数据合计的结果不对,本来查出来的结果应该是b表的两条加上c表的三条. 但是经过我的查询,结果变成了b表的两条乘以c表的三条,就是说原本应该只有2+3条结果,但是变成了2*3条结果.

于是我考虑了left join甚至用上了group by这些对我来说很难理解的语句

 结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值