Sql 如何同时查询父详细信息和顶级子记录?

Sql 如何同时查询父详细信息和顶级子记录?,sql,sql-server-2005,Sql,Sql Server 2005,不知道我会如何描述这一点,所以我想我的标题可能有点不对劲。但归根结底是,“请为我写下这个问题,我被困在地狱里了” 我有两张表(仅相关部分) 我想用这个表格返回一个列表 Entity.Id,Name,"latest related log entry's username WITH a username not null" 但是日志条目可能有没有用户名的新条目。所以我需要最后一个带有用户名的条目 我一直在获取实体列表并分别查询最新条目,但这给了我对报告可怕的N+1查询。一种方法 SELECT E

不知道我会如何描述这一点,所以我想我的标题可能有点不对劲。但归根结底是,“请为我写下这个问题,我被困在地狱里了”

我有两张表(仅相关部分)

我想用这个表格返回一个列表

Entity.Id,Name,"latest related log entry's username WITH a username not null"
但是日志条目可能有没有用户名的新条目。所以我需要最后一个带有用户名的条目

我一直在获取实体列表并分别查询最新条目,但这给了我对报告可怕的N+1查询。

一种方法

SELECT E.Id, E.Name, T.*
FROM MyEntity E
OUTER APPLY(SELECT TOP 1 * 
            FROM MyEntLogEntries L WHERE L.MyEntityId = E.Id AND Username IS NOT NULL
            ORDER BY TimeStamp DESC) T
还有一个

;WITH CTE AS
(
SELECT E.Id,
       E.Name,
       L.MyEntityId,
       L.TimeStamp,
       L.Username,
       L.Content,
       ROW_NUMBER() OVER (PARTITION BY  E.Id ORDER BY TimeStamp DESC) AS RN
FROM MyEntity E
LEFT JOIN MyEntLogEntries L ON L.MyEntityId = E.Id AND Username IS NOT NULL   

)
SELECT *
FROM CTE 
WHERE RN=1
;WITH CTE AS
(
SELECT E.Id,
       E.Name,
       L.MyEntityId,
       L.TimeStamp,
       L.Username,
       L.Content,
       ROW_NUMBER() OVER (PARTITION BY  E.Id ORDER BY TimeStamp DESC) AS RN
FROM MyEntity E
LEFT JOIN MyEntLogEntries L ON L.MyEntityId = E.Id AND Username IS NOT NULL   

)
SELECT *
FROM CTE 
WHERE RN=1