SQL - 每场比赛最多加入 N 行

SQL - Join up to N rows per match

假设我有一个一对多的关系,想在某些 JOIN_ID 上连接两个表,但是对于每个不同的 JOIN_ID,我想限制结果中的行数至我该怎么做?

*甲骨文SQL

如果您的 RDBMS 支持 row_number(),那么您可以这样做:

select *
from (
  select 
      t1.*
    , t2.*
    , row_number() over (partition by t1.join_id order by t2.id) as rn
  from t1
    inner join t2
      on t1.join_id = t2.join_id
  ) as s
where rn < 6

我会这样做:

select t1.*, t2.*
from t1 join
     (select t2.*,
             row_number() over (partition by joinkey order by ??) as seqnum
      from t2
     ) t2
     on t1.joinkey = t2.joinkey and seqnum <= 6;

?? 用于指定顺序以定义要键入的行。例如,order by id desc 将保留具有最高 ID 的行。