0

外部テーブルから最初の行のみを取得したいと思います。

以下のコードのようなことをしようとしていますが、エラーが発生します。@rID =PartRequest.Id を取得できません。

 declare @rID int
 SELECT     
   @rID =PartRequest.Id
   , Products.Name AS ProductName
   , PartRequestPhotos.Id AS PartRequestPhotosId
   , PartRequest.IsInsuranceClaimed
 FROM PartRequest 
 INNER JOIN PartRequestStatus ON PartRequest.PartRequestStatusId = PartRequestStatus.Id 
 INNER JOIN UsersInfo ON PartRequest.UserId = UsersInfo.aspnet_UserId 
 INNER JOIN Products ON PartRequest.ProductId = Products.Id 
 LEFT OUTER JOIN PartRequestPhotos ON PartRequest.Id = 
      (select top 1 Id from  PartRequestPhotos where  PartRequestId =  @rID)
4

2 に答える 2

0

データの表示前に左結合が実行されているため、@ rIDを取得できません。取得するには、クエリを次のように変更する必要があります。

変数を1つだけ割り当てるのは誤りです。すべての列を変数に割り当てるか、変数に割り当てないかのどちらかです。

左側のテーブルの各行に対してサブクエリを呼び出すことができるようにするには、外部適用を使用する必要があります。

descまたはascを指定する必要があるため、ascを指定すると、最初のIDが取得され、descは最新のIDを返します。

        SELECT     
             PartRequest.Id
           , Products.Name AS ProductName
           , PartRequestPhotos.Id AS PartRequestPhotosId
           , PartRequest.IsInsuranceClaimed
         FROM PartRequest 
         INNER JOIN PartRequestStatus ON PartRequest.PartRequestStatusId = PartRequestStatus.Id 
         INNER JOIN UsersInfo ON PartRequest.UserId = UsersInfo.aspnet_UserId 
         INNER JOIN Products ON PartRequest.ProductId = Products.Id 
         OUTER APPLY
            (
              SELECT TOP 1 
                 Id
              FROM 
                 PartRequestPhotos
              WHERE 
                 PartRequestPhotos.PartRequestId = PartRequest.Id
              ORDER BY
                Id ASC
            ) PartRequestPhotos 
于 2012-11-11T15:16:51.293 に答える
0

外部テーブルから最初の行のみを取得したいと思います。

JOINそのような条件で比較するのではなく、サブクエリで囲みます

...
LEFT OUTER JOIN
(
   select top 1 Id from  PartRequestPhotos where  PartRequestId =  @rID
)   PartRequestPhotos ON PartRequest.Id = PartRequestPhotos.Id
...
于 2012-11-11T13:28:12.300 に答える