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

SQL多表关联去重:同一organization_id的重复组织名称仅返回一条

解决重复返回同一组织记录的SQL方案

核心问题是:organization表的一条记录,在organization_relation表中存在多个符合WHERE条件的org_type_cd,导致关联查询后重复返回主表记录。DISTINCT失效是因为它会对整行(包含不同的org_type_cd)去重,无法满足需求。以下是几种可行的解决方法:

方法一:仅返回主表记录(不需要org_type_cd)

如果不需要输出org_type_cd字段,直接通过EXISTS判断组织是否存在符合条件的关联记录即可,确保主表记录唯一:

SELECT O.ORGANIZATION_ID, O.ACTIVE_IND, O.ORG_NAME
FROM ORGANIZATION O
WHERE EXISTS (
    SELECT 1
    FROM ORGANIZATION_RELATION T
    WHERE T.ORGANIZATION_ID = O.ORGANIZATION_ID
    AND T.ORG_TYPE_CD IN (2581973089.00, 2576962393.00)
)

方法二:保留org_type_cd并返回唯一组织记录(取指定类型)

如果需要保留org_type_cd字段,可使用窗口函数ROW_NUMBER()给每个组织的关联记录编号,筛选出第一条:

SELECT ORGANIZATION_ID, ACTIVE_IND, ORG_NAME, ORG_TYPE_CD
FROM (
    SELECT 
        O.ORGANIZATION_ID, 
        O.ACTIVE_IND, 
        O.ORG_NAME, 
        T.ORG_TYPE_CD,
        -- 按组织ID分组,按类型码排序取第一条,可根据需求调整ORDER BY规则
        ROW_NUMBER() OVER (PARTITION BY O.ORGANIZATION_ID ORDER BY T.ORG_TYPE_CD) AS rn
    FROM ORGANIZATION O 
    INNER JOIN ORGANIZATION_RELATION T
        ON T.ORGANIZATION_ID = O.ORGANIZATION_ID 
    WHERE T.ORG_TYPE_CD IN (2581973089.00, 2576962393.00)
) AS sub_query
WHERE rn = 1

方法三:通过聚合函数保留单个org_type_cd

使用GROUP BY按主表唯一字段分组,对org_type_cd做聚合(如取最小/最大值),确保每个组织仅返回一行:

SELECT 
    O.ORGANIZATION_ID, 
    O.ACTIVE_IND, 
    O.ORG_NAME,
    MIN(T.ORG_TYPE_CD) AS ORG_TYPE_CD -- 可替换为MAX(),根据需求选择
FROM ORGANIZATION O 
INNER JOIN ORGANIZATION_RELATION T
    ON T.ORGANIZATION_ID = O.ORGANIZATION_ID 
WHERE T.ORG_TYPE_CD IN (2581973089.00, 2576962393.00)
GROUP BY O.ORGANIZATION_ID, O.ACTIVE_IND, O.ORG_NAME

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:27:05