And*_*dre 2 sql join limit one-to-many
我有一个与1到n查询有关的问题,我希望有人可以解释一下.
这就是我想要完成的事情.
我有几个家,每个家可能有多个住户.我想选择5个家庭和所有相关的住户.我知道有两种做法.其中最常见的是使用IN条件获取5个家庭的select语句,然后使用IN条件获取相关的占用者.另一种方法是使用带有子查询的一个查询来改变两个查询.
没有使用子查询,还有其他方法可以完成吗?
更新:
似乎共识是使用子查询这是不可能的.
您通常使用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)