TSQL - FROM子查询中的TOP X?

EWi*_*ard 3 t-sql sql-server subquery

有人可以请教我一种过滤位于FROM子句中的子查询的方法吗?我希望它看起来像这样:

SELECT *
FROM TABLE_A
LEFT JOIN (TOP 8 TABLE_B) ON TABLE_B.id = TABLE_A.id
Run Code Online (Sandbox Code Playgroud)

Rem*_*anu 17

如果需要关联子查询,则需要使用APPLY而不是JOIN:

SELECT *
FROM TABLE_A
CROSS APPLY (
 SELECT TOP (8) *
 FROM TABLE_B
 WHERE TABLE_B.id = TABLE_A.id
 ORDER BY ...) AS B;
Run Code Online (Sandbox Code Playgroud)

对于 A中的每一行,这将为您提供B中的前8行.我看到的其他解决方案将为您提供A与来自B 的全球 TOP 8 之间的JOIN


Jus*_*ner 5

SELECT * 
FROM TABLE_A AS a
LEFT JOIN (SELECT TOP 8 id, field1, field2
           FROM TABLE_b) AS b
    ON a.id = b.id
Run Code Online (Sandbox Code Playgroud)

应该管用。