Tsql 查询联接中的差异

Tsql 查询联接中的差异,tsql,sql-server-2008,Tsql,Sql Server 2008,我有一个动态生成的查询 SELECT '' + CAST(GalleryGallery_tGallery._Name AS VARCHAR(4000)) + '' AS NewName FROM Photographers_tGalleries LEFT OUTER JOIN Gallery_tGallery AS GalleryGallery_tGallery ON BaseContent_tGalleries.[Gallery] = GalleryGall

我有一个动态生成的查询

SELECT '' + CAST(GalleryGallery_tGallery._Name AS VARCHAR(4000)) + '' AS NewName
FROM   Photographers_tGalleries
       LEFT OUTER JOIN Gallery_tGallery AS GalleryGallery_tGallery
         ON BaseContent_tGalleries.[Gallery] = GalleryGallery_tGallery._Guid
       LEFT OUTER JOIN BaseContent_tGalleries
         ON Photographers_tGalleries._Guid =
            BaseContent_tGalleries._Guid_Structure_Content  
这些连接在我看来是正确的。但是,无法绑定多部分标识符“BaseContent\u tGalleries.Gallery”的查询错误。

下面的查询确实有效。虽然联接与正确的字段匹配,但它们的顺序不同。我想知道为什么这个有效而另一个无效。我们想修复最上面的一个,但因为它是动态的,我期待着最少的变化

SELECT '' + CAST(GalleryGallery_tGallery._Name AS VARCHAR(4000)) + '' AS NewName
FROM   Gallery_tGallery AS GalleryGallery_tGallery
       LEFT OUTER JOIN BaseContent_tGalleries
         ON GalleryGallery_tGallery._Guid = BaseContent_tGalleries.Gallery
       LEFT OUTER JOIN Photographers_tGalleries
         ON BaseContent_tGalleries._Guid_Structure_Content =
            Photographers_tGalleries._Guid  

第一个查询不起作用,因为您试图在ON语句中使用表BaseContent\u tGalleries,但它尚未联接。换句话说,您正在使用表作为联接条件,但表本身尚未联接。

第一个查询不起作用,因为您试图在ON语句中使用table BaseContent\u tGalleries,但尚未联接。换句话说,您使用表作为联接条件,但表本身尚未联接。

您对第一个查询的联接顺序是错误的。您需要在Gallery\u tGallery之前参考BaseContent\u tGallery

SELECT '' + CAST(g._Name AS VARCHAR(4000)) + '' AS NewName
FROM   Photographers_tGalleries AS g
       LEFT OUTER JOIN BaseContent_tGalleries AS b
         ON g._Guid = b._Guid_Structure_Content
       LEFT OUTER JOIN Gallery_tGallery AS gg
         ON b.[Gallery] = gg._Guid;

顺便问一下,谁给你的表和别名命名的
GalleryGallery\u tGallery
,真的吗?我已经转换成更短的别名,以补偿真正喜欢打字的人。很多。

您对第一个查询的连接顺序是错误的。您需要在Gallery\u tGallery之前参考BaseContent\u tGallery

SELECT '' + CAST(g._Name AS VARCHAR(4000)) + '' AS NewName
FROM   Photographers_tGalleries AS g
       LEFT OUTER JOIN BaseContent_tGalleries AS b
         ON g._Guid = b._Guid_Structure_Content
       LEFT OUTER JOIN Gallery_tGallery AS gg
         ON b.[Gallery] = gg._Guid;

顺便问一下,谁给你的表和别名命名的
GalleryGallery\u tGallery
,真的吗?我已经转换成更短的别名,以补偿真正喜欢打字的人。很多。

我知道这很疯狂,这些都是日常的WTF类型的东西。我决定重写整个函数。谢谢你的帮助,我知道这很疯狂,而且这些都是日常的WTF类型的东西。我决定重写整个函数。谢谢你的帮助