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

多表关联查询需求:按状态优先级筛选Table2数据返回结果

解决方案:按优先级筛选关联表记录

没问题,我来帮你搞定这个查询需求!根据你的要求,我们需要优先获取每个id对应的status=1的Table2记录,没有的话取status=2的,两者都没有则跳过该id,同时关联Table1和Table3的对应字段。

实现思路

利用窗口函数ROW_NUMBER()为每个id的Table2记录按优先级排序:

  • 给status=1的记录分配最高优先级(排序值为1)
  • 其次是status=2的记录(排序值为2)
  • 其他status的记录排序值大于2,后续会被过滤掉

之后筛选出每个id中排序值为1的记录,再关联Table1和Table3即可得到目标结果。

完整SQL查询语句

WITH ranked_table2 AS (
    SELECT 
        id, 
        status, 
        date,
        ROW_NUMBER() OVER (
            PARTITION BY id 
            ORDER BY CASE status WHEN 1 THEN 1 WHEN 2 THEN 2 ELSE 3 END
        ) AS rn
    FROM Table2
    WHERE status IN (1, 2) -- 只保留需要考虑的status值
)
SELECT 
    t1.name,
    rt2.status,
    rt2.date,
    t3.value
FROM ranked_table2 rt2
JOIN Table1 t1 ON rt2.id = t1.id
JOIN Table3 t3 ON rt2.id = t3.id
WHERE rt2.rn = 1; -- 取每个id优先级最高的记录

查询结果验证

根据你提供的测试数据,执行上述查询后会得到如下结果:

namestatusdatevalue
A1'.11..'34
C1'.31..'17

解释一下结果:

  • id=1有status=1的记录,所以取这条
  • id=2既没有status=1也没有status=2的记录,所以被跳过
  • id=3有status=1的记录,所以取这条

如果后续有id存在status=2但没有status=1的情况(比如新增id=4,Table2里只有status=2的记录),该查询也会正确返回这条status=2的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:10:29