2011-08-03 2 views
0

동적으로 생성 된 쿼리가 있습니다.쿼리 조인의 차이점

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 

조인이 올바르게 표시됩니다. 그러나 The multi-part identifier "BaseContent_tGalleries.Gallery" could not be bound.의 쿼리 오류

다음 쿼리는 작동합니다. 조인은 올바른 필드와 일치하지만 다른 순서입니다. 나는 이것이 왜 효과가 있고 다른 것은 효과가 없는지 궁금합니다. 우리는 가장 중요한 것을 고치고 싶습니다만, 역동적이므로 최소한의 변화를 찾고 있습니다.

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 

답변

3

첫 번째 쿼리의 조인 순서가 잘못되었습니다. Gallery_tGallery 전에 BaseContent_tGalleries를 참조해야합니다.

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_tGallery, 정말요? 필자는 타이핑을 좋아하는 사람을 보완하기 위해 더 짧은 별칭으로 변환했습니다. 많이.

+1

나는 그것이 미쳤다는 것을 알고 있으며 이것들은 일상적인 유형의 것들이다. 전체 기능을 다시 작성하기로 결정했습니다. 당신의 도움을 주셔서 감사합니다 –

3

당신이 ON 문에서 테이블 BaseContent_tGalleries을 사용하려는 때문에 첫 번째 쿼리가 작동하지 않습니다,하지만 아직 가입하지 않았습니다. 즉, 테이블을 조인 조건으로 사용하지만 테이블 자체는 아직 조인되지 않았습니다.

관련 문제