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 的行。
假设我有一个一对多的关系,想在某些 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 的行。