2011-08-03 7 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を使用しようとしているが、それはまだ参加されていないので、最初のクエリでは動作しません。つまり、結合条件として表を使用していますが、表自体はまだ結合されていません。