You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据库存在数据但SQL查询丢失部分行的问题求助

问题分析与解决方法

你的问题核心是INNER JOIN过滤掉了部分记录,同时GROUP BY字段的变化也影响了最终结果行数。以下是具体的排查和解决步骤:

1. 替换连接类型为LEFT JOIN

INNER JOIN只会返回两张表中匹配成功的记录,如果你需要保留CS_AU的所有符合条件的记录(哪怕CS_DOCTYPE里没有对应描述),应该改用LEFT JOIN:

SELECT DISTINCT 
    AU.A_DOC_TYPE, COUNT(*) AS Count, DT.DOC_TYPE_DESC
FROM 
    dbo.CS_AU AU
LEFT JOIN 
    vf.vis.dbo.CS_DOCTYPE DT ON DT.DOC_TYPE = AU.A_DOC_TYPE
WHERE 
    AU.A_ACTION = 'I' 
    AND AU.A_DATE BETWEEN '2022-01-01' AND '2022-12-31' 
    AND AU.A_TO_NODE = 2
GROUP BY 
    AU.A_DOC_TYPE, DT.DOC_TYPE_DESC
ORDER BY 
    AU.A_DOC_TYPE

这样即使DOC_TYPE_DESC不存在,也会显示为NULL,而CS_AU的所有符合条件的记录都会被保留。

2. 验证缺失的A_DOC_TYPE是否真的存在于CS_DOCTYPE

你可以用下面的SQL检查哪些A_DOC_TYPE在CS_DOCTYPE里没有匹配项:

SELECT DISTINCT A_DOC_TYPE
FROM dbo.CS_AU
WHERE A_ACTION = 'I' 
  AND A_DATE BETWEEN '2022-01-01' AND '2022-12-31' 
  AND A_TO_NODE = 2
  AND A_DOC_TYPE NOT IN (SELECT DOC_TYPE FROM vf.vis.dbo.CS_DOCTYPE)

如果返回结果,说明确实存在不匹配的情况,常见原因包括:

  • 数据类型不一致(比如一个是CHAR,一个是VARCHAR,导致尾部空格差异)
  • 大小写或特殊字符差异(比如'PO'和'po')
  • 视图vf.vis.dbo.CS_DOCTYPE的权限限制,导致你看不到完整数据

3. 先聚合再关联(更稳妥的方式)

如果每个A_DOC_TYPE对应唯一的DOC_TYPE_DESC,可以先对CS_AU进行聚合得到198行结果,再关联CS_DOCTYPE获取描述,避免JOIN影响聚合结果:

SELECT 
    agg.A_DOC_TYPE, agg.Count, DT.DOC_TYPE_DESC
FROM (
    SELECT 
        A_DOC_TYPE, COUNT(*) AS Count
    FROM dbo.CS_AU
    WHERE A_ACTION = 'I' 
      AND A_DATE BETWEEN '2022-01-01' AND '2022-12-31' 
      AND A_TO_NODE = 2
    GROUP BY A_DOC_TYPE
) agg
LEFT JOIN vf.vis.dbo.CS_DOCTYPE DT ON DT.DOC_TYPE = agg.A_DOC_TYPE
ORDER BY agg.A_DOC_TYPE

这种写法确保聚合结果不受JOIN的影响,同时能获取到对应的描述信息。

内容的提问来源于stack exchange,提问作者SJac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:39:36