SQL数据记录集重复的问题

本文探讨了SQL数据处理中出现的记录集重复问题,并详细解释了如何通过调整SQL语句来避免这一问题。通过深入分析业务需求,明确了物料分类导致的数据重复原因,并给出了具体的解决方案。

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

调试SQL数据,发现数据记录集重复问题,所以,计算出的数据结果倍数问题。通过调试SQL,发现是物料的分类产生重复;之所以产生重复,物料的分类标准不一样,与实际的业务有关。程序中一直用类别来区分类别,而这张次实际业务不需要与类别有关,所以,没有对应的过滤条件,所有的类别全部选出来了。然后,把下面的红色字段注释掉,结果正确。这个问题与之前的union all 或 distinct 有点类似。所以,谨慎而正确的使用,一定要认真的分析业务,只有正确的理解实际的业务需求,才能写出正确的SQL语句。甚至左连接,右连接或内连接,都是与业务有关的。

/*dialect*/
select nvl(sum(nvl(tcta.fcznum, 0)), 0) superadditionCount,
       nvl(sum(nvl(tcta.fczmoney, 0)), 0) superadditionMoney,
       nvl(sum(nvl(tcta.fczresetnum, 0)), 0) superadditionReenabledCount,
       nvl(sum(nvl(tcta.fczresetmoney, 0)), 0) superadditionReenabledMoney,
       nvl(sum(nvl(tcta.fczdiffmoney, 0)), 0) superadditionDifferenceCount
from
    t_cus_thkentrys2 tcta
    inner join t_cus_thk tct on tcta.fparentid = tct.fid
    left join ( /*dialect*/
             select distinct
                 tbc.fid       id,
                 tbcg.fid      bid,
                 tbcg.fnumber businessType,
                 tbcg.fname_l2 businessName,
                 tbcs.fnumber classificationStandardCoding,
                 tbcs.fname_l2 classificationStandardName,
                 tbc.fnumber   clientCode,
                 tbc.fname_l2 clientName,
                 tbc.faddress address,
                 tbc.fname_l2 unitName
             from
                 t_bd_csspgroup tbcg
                 inner join t_bd_csspgroupstandard tbcs on tbcg.fcsspgroupstandardid = tbcs.fid
                 inner join t_bd_customer tbc on tbc.fbrowsegroupid = tbcg.fid) customer on customer.id = tct.fbackunitid
    left join ( /*dialect*/
             select distinct
                 material.fid id, -- 物料id.
                 material.fnumber materialCode/*, -- 物料编码.
                 nvl(material.flength, 0) deposite, -- 押金.
               nvl(material.fwidth, 0) storeValue, -- 储值.
               nvl(material.flength, 0) actualDeposite, -- 实际押金 = 押金.
               mgroup.fnumber cardCategory -- 卡类别.*/
             from
                 t_bd_materialgroupdetial mgdetail
                 inner join t_bd_materialgroup mgroup on mgroup.fid = mgdetail.fmaterialgroupid
                 inner join t_bd_materialgroupstandard mgstand on mgstand.fid = mgdetail.fmaterialgroupstandardid
                 inner join t_bd_material material on material.fid = mgdetail.fmaterialid) material on material.id = tcta.fczproducidid
where
       customer.clientCode = '101001'
   and material.materialCode like '3%'
   and tct.fbillstates = 25
   and to_char(tct.fbizdate, 'yyyy-MM-dd') >= '2009-01-01'
   and to_char(tct.fbizdate, 'yyyy-MM-dd') <= '2009-01-31'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值