嘘~ 正在从服务器偷取页面 . . .

一对多联合查询导致查询数量增加


今天联合查询某条数据数量时,发现有些联合查询后数量会变多

错误的结果

出现错误的语句:

UPDATE Tmp
SET Tmp.DD_sftCount = ISNULL(ImpSql.Counts),Tmp.DD_MZXS = ISNULL(ImpSql.ItemsCounts,0)
FROM #tmp_Pjddmzl AS Tmp
LEFT JOIN (SELECT a.GuestId,COUNT(a.ID) AS Counts,COUNT(b.RepairSpecApplyId) AS ItemsCounts
    FROM Service_RepairSpecApply AS a
    LEFT JOIN Service_RepairSpecApply_Items AS b ON b.RepairSpecApplyId = a.ID
    GROUP BY a.GuestId)
AS ImpSql ON ImpSql.GuestId = Tmp.GuestId

查阅资料时突然想到

Service_RepairSpecApply与Service_RepairSpecApply_Items是一对多的对应关系,查询中主表会有多个Items,故Counts列会重复。

需要使用DISTINCT或者GROUP BY等进行去重或转化为聚合查询

修改后:

UPDATE Tmp
SET Tmp.DD_sftCount = ISNULL(ImpSql.Counts),Tmp.DD_MZXS = ISNULL(ImpSql.ItemsCounts,0)
FROM #tmp_Pjddmzl AS Tmp
LEFT JOIN (SELECT a.GuestId,COUNT(DISTINCT a.ID) AS Counts,COUNT(b.RepairSpecApplyId) AS ItemsCounts
    FROM Service_RepairSpecApply AS a
    LEFT JOIN Service_RepairSpecApply_Items AS b ON b.RepairSpecApplyId = a.ID
    GROUP BY a.GuestId)
AS ImpSql ON ImpSql.GuestId = Tmp.GuestId

结果:

正确的结果

手撸SQL真的好累阿(~﹃~)~zZ

表数量一多一犯迷糊就会出问题>︿<


文章作者: Seacolorfox
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Seacolorfox !
评论