Sql 仅在三个表上连接一行
(我的问题在涉及两张桌子的情况下被问了很多次,并且得到了回答。但我不知道如何在涉及三张桌子的情况下做到这一点。) 我有三个表,A、B和C,其中A有许多B,B有许多C。我想连接这些表,并为每个A选择零行或一行,其中一行应该基于C中的条件 例如,假设:Sql 仅在三个表上连接一行,sql,sql-server,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
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'
…产生以下结果:
aId bId cId
=== === ===
1 11 101
1 12 102
1 12 103
2 21 201
2 21 203
2 22 202
…然后我想,例如,检索两个不同的A行,它们具有最高的cId
aId bId cId
=== === ===
1 12 103
2 21 203
您可以使用
行编号
:
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