2017-04-06 76 views
0

假設我有一對多關係,並希望在某些JOIN_ID上連接兩個表,但對於每個不同的JOIN_ID,我希望將結果中的行數限制爲ñ。我將如何做到這一點?SQL - 每匹配最多加入N行

*的Oracle SQL

+3

請用您的RDBMS標記您的問題。例如mysql,sql server,postgres,teradata等... – SqlZim

+0

可能重複的[如何限制這個LEFT JOIN返回的行數爲1?](http://stackoverflow.com/questions/10236229/how-do -i-limit-the-number-of-rows-by-this-left-join-to-one) - 將其限制爲1幾乎與將其限制爲2,3,4等相同。 – hatchet

回答

1

我會做這樣的:

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的行。

+0

我認爲這應該工作,除了我想內連接。 – Apollys

+0

這看起來效率很低,會帶來新的問題。 – Apollys

0

如果您的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