我的桌子上有两列RequestId和OldRequestId。
RequestId
OldRequestId
如果我通过RequestId,它将检索我特定的记录。
如果OldRequestId检索到的记录中的s不为null,则它也应携带旧的请求数据。
它应该一直持续到直到OldRequestId为null。
有人可以帮助我为此要求编写最佳的SQL查询吗?
您可以使用递归公用表表达式(CTE)解决此问题:
DECLARE @RequestID int = 6; WITH ReqCTE AS ( SELECT RequestID, OldRequestID FROM Requests WHERE RequestID = @RequestID UNION ALL SELECT R.RequestID, R.OldRequestID FROM ReqCTE C INNER JOIN Requests R ON R.RequestID = C.OldRequestID ) SELECT * FROM ReqCTE;