本文主要是介绍一对多用left join 的关系。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
首先我们给定三张表 p_Project,cb_Contract,cb_HTFKApply,分别代表项目、合同和付款申请。
三张表的关系为:p_Project < cb_Contract < cb_HTFKApply ‘<’代表的是一对多关系。
一、先以一作为左表:
select a.p_projectId,a.ProjName,SUM(c.TotalPayAmount) SumTotalPayAmount from p_Project a left join cb_Contract b on a.p_projectId = b.ProjGUID left join cb_HTFKApply c on b.ContractGUID = c.ContractGUID group by a.p_projectId,a.ProjName
-- having SUM(c.TotalPayAmount) is not null
(可以看到数据为960行,但是支付金额求和有很多为null的情况发生,这是为什么呢,因为p_Project 作为左表,左表显示全部数据,一对多的情况下,项目也有可能没有合同,这个时候会有Null填充这个项目下合同和付款申请的字段)
二、以多作为主表:
select c.p_projectId,c.ProjName,SUM(a.TotalPayAmount) SumTotalPayAmount from cb_HTFKApply a left join cb_Contract b on a.ContractGUID = b.ContractGUID left join p_Project c on b.ProjGUID = c.p_projectId group by c.p_projectId,ProjName
(可以看到数据为48行,这是因为项目下,对应合同的付款申请只有48个,且金额求和的时候是有数据的,求和为0说明当时申请的金额为0或者正负想减)
这篇关于一对多用left join 的关系。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!