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

SQL双表关联查询时如何去除重复行 仅取单条匹配值

方案1:先对UL表按PARTY_ID分组去重后再关联

你可以先从UL表中给每个PARTY_ID筛选出唯一一条NAME记录,再和UC表做关联,即可避免重复行。如果仅要求任意取一条NAME,直接用MIN/MAX聚合函数即可,写法如下:

SELECT uc.*, ul.NAME
FROM UC AS uc
INNER JOIN (
    SELECT PARTY_ID, MIN(NAME) AS NAME 
    FROM UL 
    GROUP BY PARTY_ID
) AS ul ON uc.PARTY_ID = ul.PARTY_ID
WHERE uc.PID = '33322';

这里用MIN(NAME)会取字母序最小的NAME,换成MAX(NAME)就会取最大的,均满足“任意取一条”的需求,和你给出的预期输出结果完全匹配。


方案2:用窗口函数(支持MySQL 8.0+/PostgreSQL/Oracle等主流新版本数据库)

如果你需要更灵活的筛选规则(比如取UL表中ID最小的记录对应的NAME),可以用ROW_NUMBER窗口函数实现:

SELECT uc.*, ul.NAME
FROM UC AS uc
INNER JOIN (
    SELECT 
        PARTY_ID, 
        NAME,
        ROW_NUMBER() OVER (PARTITION BY PARTY_ID ORDER BY ID) AS rn
    FROM UL
) AS ul ON uc.PARTY_ID = ul.PARTY_ID AND ul.rn = 1
WHERE uc.PID = '33322';

这里的ORDER BY ID是指定按UL表的ID升序排序,取每个PARTY_ID第一条记录的NAME,你可以调整排序规则来指定优先取哪一条,不指定排序规则也能拿到任意一条符合要求的结果。


方案3:用DISTINCT简化写法(仅当不需要指定取哪条NAME时)

如果完全不在乎取到的NAME是哪条,也可以直接在原查询基础上加DISTINCT实现去重:

SELECT DISTINCT uc.*, ul.NAME
FROM UC AS uc
INNER JOIN UL AS ul ON uc.PARTY_ID = ul.PARTY_ID
WHERE uc.PID = '33322';

该写法仅在同一个PARTY_ID对应的UC行全部唯一时生效,你的场景下UC的PARTY_ID都是唯一的,所以也能得到去重后的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:24:05