SQL一对多JOIN没有子查询?

And*_*dre 2 sql join limit one-to-many

我有一个与1到n查询有关的问题,我希望有人可以解释一下.

这就是我想要完成的事情.

我有几个家,每个家可能有多个住户.我想选择5个家庭和所有相关的住户.我知道有两种做法.其中最常见的是使用IN条件获取5个家庭的select语句,然后使用IN条件获取相关的占用者.另一种方法是使用带有子查询的一个查询来改变两个查询.

没有使用子查询,还有其他方法可以完成吗?

更新:

似乎共识是使用子查询这是不可能的.

gbn*_*gbn 5

您通常使用JOIN从两个表中获取相关数据

SELECT
   *
FROM
   (SELECT TOP 5 * FROM Homes ORDER BY something) H
   JOIN
   Occupants O ON H.HomeID = O.HomeID
Run Code Online (Sandbox Code Playgroud)

但是,TOP 5只需要应用于Homes.这是MySQL的LIMIT,而不是TOP.

编辑:

窗口/排名功能仍然需要子查询或某些间接(例如CTE)以允许对生成的数字进行过滤.

SELECT
   *
FROM
   (SELECT *, ROW_NUMBER() OVER (ORDER BY something) AS RowNum
    FROM Homes) H
   JOIN
   Occupants O ON H.HomeID = O.HomeID
WHERE
   RowNum <= 5

;WITH CTE AS
(
   SELECT
    *, ROW_NUMBER() OVER (ORDER BY something) AS RowNum
   FROM
    Homes
 )
SELECT
   *
FROM
   CTE H
   JOIN
   Occupants O ON H.HomeID = O.HomeID
WHERE
   RowNum <= 5
Run Code Online (Sandbox Code Playgroud)