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

一对多关联SQL查询:优先取关联表指定值行且保证主表主键唯一

SQL查询实现方案

需求说明

实现一对多关联表的去重匹配查询,每个tableA的主键仅返回1条匹配的tableB记录,匹配优先级为columnA=2 > columnA=1。

实现方法

方法1:窗口函数法(通用,支持所有主流现代数据库,MySQL 8.0+、PostgreSQL、SQL Server、Oracle均可使用)

该方法扩展性最强,后续如果调整优先级规则也可以快速修改:

SELECT a.id, b.columnA
FROM tableA a
LEFT JOIN (
    SELECT 
        fkid, 
        columnA,
        -- 按优先级排序,columnA=2的排第1,columnA=1的排第2
        ROW_NUMBER() OVER (PARTITION BY fkid ORDER BY CASE WHEN columnA = 2 THEN 1 ELSE 2 END ASC) AS rn
    FROM tableB
) b ON a.id = b.fkid AND b.rn = 1;

方法2:聚合函数法(更简洁,适配当前优先级规则,支持所有数据库包括低版本MySQL)

由于当前优先级刚好是数值更大的columnA优先,直接取每个外键对应的最大columnA即可:

SELECT a.id, MAX(b.columnA) AS columnA
FROM tableA a
LEFT JOIN tableB b ON a.id = b.fkid
GROUP BY a.id;

测试结果

针对提供的测试数据,两种方法返回的结果一致:

idcolumnA
12
21

扩展说明

如果后续优先级规则调整,比如优先取columnA=1再取columnA=2,只需要修改窗口函数的ORDER BY逻辑即可,不需要改动整体结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:54:08