仅在三个表上加入一行

Tor*_*lin 2 sql sql-server

(我的问题很多时候都涉及到两个表,并且已经在这里,这里这里得到了解答.但是我无法弄清楚如何对涉及的三个表做同样的事情.)

我有三个表,A,B和C,其中A有很多B,B有很多C.我想加入这些表,每个A选择零或一行,其中一个应该基于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'
Run Code Online (Sandbox Code Playgroud)

...产生以下结果:

aId   bId   cId
===   ===   ===
1     11    101
1     12    102
1     12    103
2     21    201
2     21    203
2     22    202
Run Code Online (Sandbox Code Playgroud)

...那么我想,例如,检索两个不同的A行,最高的那些cId.

aId   bId   cId
===   ===   ===
1     12    103
2     21    203
Run Code Online (Sandbox Code Playgroud)

Fel*_*tan 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
Run Code Online (Sandbox Code Playgroud)