首页 > 解决方案 > 基于 Rank 的 SQL 条件连接

问题描述

我正在尝试根据 Instrument 和 Rank 加入两个表。如果 Instrument 和 Rank 匹配,则它是直接连接。否则加入应按顺序寻找下一个可用等级。例如,如果 Instrument CDF 和 Rank 1 在表 2 中不匹配,则 sql 查询应该寻找 CDF 和 Rank 2 来匹配。如果匹配,则移至表 1 中的下一个仪器和排名。

输出的行数应与表 1 中的行数相同,并且根据上述逻辑仅匹配表 2 中的数量。表 1 不会有重复项。

任何算法或示例代码都会有很大帮助。

测试:

根据样本数据,输出应该有 3 行。

  1. 表 1 中的 ABC 1 应与表 2 中的 ABC 1 匹配并返回数量 55。
  2. 表 1 中的 CDF 1 应与表 2 中的 CDF 2 匹配,并返回 qty 作为 56。
  3. 表 1 中的 CDE 2 应与表 2 中的 CDE 4(不是排名 1)匹配,并返回 qty 作为 91。

希望这将澄清请求。

示例数据的预期结果:

乐器 数量
美国广播公司 55
CDF 56
CDE 91

示例数据

表格1:

乐器 ID 位置
美国广播公司 1 2 A1
CDF 1 78 阿布格
CDE 2 65 东风

表 2:

插件 数量
美国广播公司 55 1
美国广播公司 65 2
美国广播公司 76 4
CDF 56 2
CDF 55 3
CDF 33 4
CDE 78 1
CDE 91 4

标签: sql

解决方案


select
  *,
  (
    select qty
    from table2 as t2
    where t2.instrument = t1.instrument and t2.rank >= t1.rank
    order by t2.rank limit 1
  ) as qty
from table1 as t1;

如果您需要多于一列table2然后使用cross join lateral


推荐阅读