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