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

基于inno关联两张表生成指定结果集的SQL实现问题

问题描述

现有两张表,结构及数据如下:

table1表

header  type agrid inno stallno
0       D     14    001  000
0       D     14    008  000
0       N     14    008  000

另一张表(假设名为table2)

header  type  agrid inno stallno
1        NULL  14    001  000
1        NULL  14    008  000

需要生成如下结果集:

header  type  agrid  inno
0       D      14     001
1       NULL   14     001
0       D      14     008
1       NULL   14     008
0       N      14     008
1       NULL   14     008

尝试使用row_number()函数实现,但仅部分agrid生效,其余无法得到正确结果,求可行解决方法。

解决方案

这里不需要用row_number(),核心需求是让table1中的每一行,都对应table2中相同agrid和inno的行,然后将两部分数据合并后排序。可以通过UNION ALL结合关联查询实现:

SELECT header, type, agrid, inno
FROM (
    -- 包含table1的所有原始行
    SELECT header, type, agrid, inno FROM table1
    UNION ALL
    -- 关联table2,取出与table1每行匹配的对应行
    SELECT t2.header, t2.type, t2.agrid, t2.inno
    FROM table1 t1
    JOIN table2 t2 
        ON t1.agrid = t2.agrid 
        AND t1.inno = t2.inno
) AS combined_data
-- 按要求排序,保证同agrid、inno的行排在一起,header小的在前
ORDER BY agrid, inno, header;

逻辑说明

  1. 第一部分直接取出table1的所有行,保留原始数据;
  2. 第二部分通过JOIN关联table1和table2,匹配条件为agrid和inno一致,这样table1中每一行都会对应到table2中符合条件的行;
  3. 用UNION ALL合并两部分数据(注意用UNION ALL而非UNION,避免去重丢失数据);
  4. 最后按agrid、inno、header排序,得到期望的结果顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:45:27