You need to enable JavaScript to run this app. 如何编写Select语句实现单表记录与另一表分组子集的关联合并
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Select语句实现单表记录与另一表分组子集的关联合并

实现思路与SQL方案

核心逻辑梳理

  • 首先提取A表中符合area = 'a1'且rmid = 1的基准记录
  • 提取B表中pid = 999(对应A表area=a1下rmset=yes的rmid值)的所有记录,同时获取这些记录去重后的setid集合
  • 给每个setid都拼接上A表的基准记录,再和B表的有效记录合并,排序后即可得到和示例C完全一致的结果

可行SQL语句

SELECT area, rmid, setid FROM (
    -- 第一部分:每个setid对应拼接A表的基准记录(rmid=1的a1记录)
    SELECT a.area, a.rmid, b_set.setid
    FROM A a
    CROSS JOIN (
        -- 取B表符合条件的所有去重setid
        SELECT DISTINCT setid 
        FROM B 
        WHERE pid = (SELECT rmid FROM A WHERE area = 'a1' AND rmset = 'yes')
    ) b_set
    WHERE a.area = 'a1' AND a.rmid = 1

    UNION ALL

    -- 第二部分:B表符合条件的业务记录,补全area字段为a1
    SELECT 'a1' AS area, b.rmid, b.setid
    FROM B
    WHERE pid = (SELECT rmid FROM A WHERE area = 'a1' AND rmset = 'yes')
) res
-- 按setid、rmid排序和示例C输出顺序一致
ORDER BY setid, rmid;

补充说明

  • 语句没有硬编码999,通过关联A表的条件动态取对应rmid作为B表的pid筛选条件,兼容性更强
  • 如果业务上确定pid固定为999,也可以直接把子查询替换为pid=999,执行效率更高
  • 最终输出结果和示例C的结构、数据完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:42:01