Sql 在引用外部表时从子查询的顶部1联接

Sql 在引用外部表时从子查询的顶部1联接,sql,sql-server,tsql,Sql,Sql Server,Tsql,我从这个查询开始,它可以很好地工作: SELECT C.ContactSys , ... a bunch of other rows... FROM Users U INNER JOIN Contacts C ON U.ContactSys = C.ContactSys LEFT JOIN UserWatchList UW ON U.UserSys = UW.UserSys LEFT JOIN Accounts A ON C.AccountSys

我从这个查询开始,它可以很好地工作:

SELECT 
    C.ContactSys
    , ... a bunch of other rows... 
FROM Users U
    INNER JOIN Contacts C ON U.ContactSys = C.ContactSys 
    LEFT JOIN UserWatchList UW ON U.UserSys = UW.UserSys 
    LEFT JOIN Accounts A ON C.AccountSys = A.AccountSys 
WHERE 
     C.OrganizationSys = 1012
     AND U.UserTypeSys = 2 
     AND C.FirstName = 'steve'
现在,我得到了这个要求:

对于访问者搜索返回的每个访问者,使用ContactSys,在GuestLog表中获取该联系人的最新条目,然后从GuestLog表中返回列ABC和XYZ

我在这方面遇到了麻烦。我需要这样的东西(我想)

只是这不是因为联接上的子查询对外部表一无所知

我一直在看这些帖子和它们的答案,但我很难将它们翻译成我的需要:


如果这是您想要的逻辑,您可以使用
外部应用

SELECT C.ContactSys, GL.ABC, GL.XYZ,
        ... a bunch of other columns ... 
FROM Users U JOIN
     Contacts C
     ON U.ContactSys = C.ContactSys LEFT JOIN
     UserWatchList UW 
     ON U.UserSys = UW.UserSys LEFT JOIN
     Accounts A
     ON C.AccountSys = A.AccountSys OUTER APPLY
     (SELECT TOP 1 gl.*
      FROM GuestLog gl
      WHERE gl.ContactSys = C.ContactSys
      ORDER BY gl.GuestLogSys DESC
     ) GL
WHERE C.OrganizationSys = 1012 AND
      U.UserTypeSys = 2 AND
      C.FirstName = 'steve'

这似乎奏效了!谢谢我将继续阅读外部应用程序。
SELECT C.ContactSys, GL.ABC, GL.XYZ,
        ... a bunch of other columns ... 
FROM Users U JOIN
     Contacts C
     ON U.ContactSys = C.ContactSys LEFT JOIN
     UserWatchList UW 
     ON U.UserSys = UW.UserSys LEFT JOIN
     Accounts A
     ON C.AccountSys = A.AccountSys OUTER APPLY
     (SELECT TOP 1 gl.*
      FROM GuestLog gl
      WHERE gl.ContactSys = C.ContactSys
      ORDER BY gl.GuestLogSys DESC
     ) GL
WHERE C.OrganizationSys = 1012 AND
      U.UserTypeSys = 2 AND
      C.FirstName = 'steve'