2016-05-19 13 views
2

(私の質問は2つのテーブルが関係していると多くの質問があり、hereherehereと回答していますが、3つのテーブルで同じことをする方法がわかりません3つのテーブルだけで1行を結合する

私は3つのテーブルA、B、Cを持っています。ここでAはBが多く、BにはCがたくさんあります。これらのテーブルを結合し、Aに基づいて0または1つの行を選択します。 C.における条件

例は、以下のことを仮定する:

SELECT 
    a.aId 
    ,b.bId 
    ,c.cId 
FROM 
    a 
    INNER JOIN b ON b.aId=a.aId 
    INNER JOIN c ON c.bId=b.bId 
WHERE 
    c.someColumn='foo' 
その後、私は、例えば、最高 cIdで二つの異なるA-行、ものを取得したいと思います...

aId bId cId 
=== === === 
1  11 101 
1  12 102 
1  12 103 
2  21 201 
2  21 203 
2  22 202 

:10

...は、次の結果が得られます。

aId bId cId 
=== === === 
1  12 103 
2  21 203 

答えて

6

あなたはROW_NUMBERを使用することができます。

WITH Cte AS (
    SELECT 
     a.aId, 
     b.bId, 
     c.cId, 
     rn = ROW_NUMBER() OVER (PARTITION BY a.aId ORDER BY c.cId DESC) 
    FROM a 
    INNER JOIN b 
     ON b.aId = a.aId 
    INNER JOIN c 
     ON c.bId = b.bId 
    WHERE c.someColumn = 'foo' 
) 
SELECT 
    aId, bId, cId 
FROM Cte 
WHERE rn = 1 
関連する問題