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

可视化工具仅支持单源查询,合并三张无关表后SQL结果重复问题求助

嘿,我完全懂这种被工具限制+多表合并出问题的烦躁!你的核心问题是:三张表合并后,Princess出现了两行重复数据,而你需要每条狗对应唯一一行,还要基于体重匹配来修正这个结果对吧?

先帮你拆解问题本质:出现重复行大概率是因为其中某张表(比如体重表)里Princess有多条记录,直接关联后就会产生笛卡尔积式的重复。下面给你几个针对性的解决方案,你可以根据自己的实际需求选:

方案1:取Princess的最新体重(最常用场景)

如果你的体重表有日期字段,想拿每条狗的最新体重数据,用窗口函数就能精准定位唯一行:

SELECT 
    d.dog_name,
    wr_latest.weight,
    hi.vaccination_status -- 替换成你需要的其他表字段
FROM dogs d
LEFT JOIN (
    -- 给每条狗的体重记录按日期倒序编号,取最新的那一条
    SELECT 
        dog_id, 
        weight,
        ROW_NUMBER() OVER (PARTITION BY dog_id ORDER BY record_date DESC) AS rn
    FROM weight_records
) wr_latest ON d.dog_id = wr_latest.dog_id AND wr_latest.rn = 1
LEFT JOIN health_info hi ON d.dog_id = hi.dog_id;

这样每个狗只会关联到自己最新的那一条体重数据,自然不会出现重复行。

方案2:匹配特定体重值

如果你明确知道Princess需要匹配的体重(比如12kg),直接在连接条件里加筛选就行:

SELECT 
    d.dog_name,
    wr.weight,
    hi.vaccination_status
FROM dogs d
LEFT JOIN weight_records wr ON d.dog_id = wr.dog_id AND wr.weight = 12 -- 指定目标体重
LEFT JOIN health_info hi ON d.dog_id = hi.dog_id;

要是你是按特定日期的体重匹配,把wr.weight = 12换成wr.record_date = '2024-05-20'就行。

方案3:把所有体重聚合到一行(如果需要保留全部体重)

如果你不想丢弃体重数据,只是要把同一只狗的多条体重合并成一个字段,可以用字符串聚合函数:

-- PostgreSQL版本
SELECT 
    d.dog_name,
    STRING_AGG(wr.weight::TEXT, ', ') AS all_weights, -- 用逗号分隔所有体重
    hi.vaccination_status
FROM dogs d
LEFT JOIN weight_records wr ON d.dog_id = wr.dog_id
LEFT JOIN health_info hi ON d.dog_id = hi.dog_id
GROUP BY d.dog_name, hi.vaccination_status;

-- MySQL版本
SELECT 
    d.dog_name,
    GROUP_CONCAT(wr.weight SEPARATOR ', ') AS all_weights,
    hi.vaccination_status
FROM dogs d
LEFT JOIN weight_records wr ON d.dog_id = wr.dog_id
LEFT JOIN health_info hi ON d.dog_id = hi.dog_id
GROUP BY d.dog_name, hi.vaccination_status;

这样每条狗只会有一行,体重信息也都保留在一个字段里。

核心思路就是:要么筛选出单条匹配的体重记录,要么把多条体重记录聚合为单个字段,确保最终结果里每条狗唯一对应一行。如果你的表结构和我假设的有出入,比如体重数据存在其他表,只要调整连接逻辑和筛选条件就行~

内容的提问来源于stack exchange,提问作者S.Patt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:54:42