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

MySQL技术问询:两次内连接后GROUP BY外部引用及存储路径重复问题

解决MySQL查询中storagePath重复的问题

根据你描述的情况——用了DISTINCT但仍出现计算机名+盘符的重复,结合历史表(rqDiskdrivesHist)和两次内连接的场景,我来拆解问题并给出具体解决方案:

为什么DISTINCT没解决重复?

DISTINCT是对整行数据去重,只要usedMB或sizeMB有差异(比如同一盘符在不同时间点的剩余空间不同),整行就会被判定为不同,导致storagePath重复。要解决这个问题,得针对assetname+caption的组合做分组或筛选,而不是依赖整行去重。

具体解决方案

场景1:历史表有多条时间记录,需要取最新数据

如果rqDiskdrivesHist有时间戳字段(比如recordTime),直接用窗口函数筛选每个盘符的最新记录:

SELECT 'ServerDrive' as storageType,
       CONCAT(assetname, '\\', caption) as storagePath,
       ((size - freespace)/1024/1024) as usedMB,
       (size/1024/1024) as sizeMB
FROM (
    SELECT 
        assetname, 
        caption, 
        size, 
        freespace,
        -- 按计算机名+盘符分组,取最新时间的记录
        ROW_NUMBER() OVER (PARTITION BY assetname, caption ORDER BY recordTime DESC) as rn
    FROM rqDiskdrivesHist
    -- 把你的两次内连接放到子查询里,避免提前放大数据
    JOIN lanswee表 ON rqDiskdrivesHist.关联字段 = lanswee表.关联字段
    JOIN 另一连接表 ON rqDiskdrivesHist.关联字段 = 另一连接表.关联字段
) t
WHERE rn = 1;

场景2:不需要历史记录,只需保留唯一盘符的聚合数据

如果同一盘符有多条记录,你可以对数值字段做聚合(比如取平均值、最大值),再按盘符分组:

SELECT 'ServerDrive' as storageType,
       CONCAT(assetname, '\\', caption) as storagePath,
       -- 可根据需求替换成MAX/MIN/AVG
       MAX((size - freespace)/1024/1024) as usedMB,
       MAX(size/1024/1024) as sizeMB
FROM rqDiskdrivesHist
JOIN lanswee表 ON rqDiskdrivesHist.关联字段 = lanswee表.关联字段
JOIN 另一连接表 ON rqDiskdrivesHist.关联字段 = 另一连接表.关联字段
GROUP BY assetname, caption;

场景3:内连接引入重复数据

如果两次内连接的表存在一对多关系(比如lanswee表有重复的assetname记录),先对连接表做去重再关联:

SELECT 'ServerDrive' as storageType,
       CONCAT(t1.assetname, '\\', t2.caption) as storagePath,
       ((t2.size - t2.freespace)/1024/1024) as usedMB,
       (t2.size/1024/1024) as sizeMB
FROM (
    -- 先对lanswee表去重,保留唯一的assetname记录
    SELECT DISTINCT assetname, 其他需要的字段
    FROM lanswee表
) t1
JOIN rqDiskdrivesHist t2 ON t1.assetname = t2.assetname
JOIN (
    -- 对第二个连接表也做去重处理
    SELECT DISTINCT 关联字段, 其他需要的字段
    FROM 另一连接表
) t3 ON t2.关联字段 = t3.关联字段
-- 最后按计算机名+盘符分组,确保唯一
GROUP BY t1.assetname, t2.caption;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:44:25