2016-09-01 11 views
1

このクエリを実行しようとしていますが動作しません。このソリューションのために親切にしてください。あなたが使用する必要が使用方法SQLで左結合で上位1つのサブクエリを選択

SELECT DISTINCT tblAdvertisement.AdvID, 
       tblAdvertisement.CityName, 
       tblAdvertisement.Model, 
       tblAdvertisement.Year, 
       tblAdvertisement.Mileage, 
       tblAdvertisement.imgPath, 
       tblAdvertisement.Price, 
       tblAdvertisement.VoteScore, 
       tblLike.isLike 
FROM   tblAdvertisement 
LEFT JOIN  tblimg 
       ( 
         SELECT TOP 1 
           ImgPath 
         FROM tblimg) AS 
ON    tblAdvertisement.AdvID = tblimg.AdvID 
LEFT JOIN  tblLike 
ON    tblAdvertisement.AdvID = tblLike.AdvID 
AND    tblAdvertisement.UserID = @userID 
ORDER BY  AdvID DESC 
+2

「OUTER APPLY」について調べる – Lamak

+0

ニース[クロス/アウターの記事を適用](http://www.codeproject.com/Articles/607246/Making-OUTER-and-CROSS-APPLY-work-for -you)をcodeprojectから削除します。 – xQbert

+0

サブクエリに結合されたサブクエリは、サブクエリの前ではなく、そのASの後に別名を持つ必要があります。 LEFT JOIN ON(1 = 1)またはOUTER APPLYのいずれかになります。 – LukStorms

答えて

4

参加OUTER APPLY

SELECT DISTINCT A.AdvID, 
       A.CityName, 
       A.Model, 
       A.Year, 
       A.Mileage, 
       I.imgPath, 
       A.Price, 
       A.VoteScore, 
       L.isLike 
FROM   tblAdvertisement A 
OUTER APPLY  (SELECT TOP 1 
           ImgPath 
        FROM tblimg 
        WHERE AdvID = A.AdvID 
        ORDER BY SomeColumnToOrderBy) I 
LEFT JOIN  tblLike L 
ON    A.AdvID = L.AdvID 
AND    A.UserID = @userID 
ORDER BY  A.AdvID DESC; 

注意してくださいあなたはTOP 1画像が必要な場合、あなたはそれ以外の場合は、あなたが1の代わりに、いくつかの任意の行を取得されるだろう、ORDER BYやるべきことあなたは実際に欲しい。

関連する問題