質問

私は、サブクエリ内の行の有無をチェックするWhere句がありますが、私は唯一のビットが1に設定されている場合は、そのチェックを実行するので、例えばます:

Select * from Listing l
Where
l.IsDeleted=1 
AND CASE WHEN @MustHasPicture = 1  THEN 
(
    EXISTS
    (
        SELECT NULL AS [EMPTY]
        FROM [dbo].[ListingPictures] AS [lp]
        INNER JOIN Listing l ON lp.ListingID=l.ID
    )
)
ELSE 1 END = 1

この構文が間違っている、と私は、誰かが正しい方向に私を指すことができます願っています。おかげます。

役に立ちましたか?

解決

SELECT * 
  FROM Listing l
 WHERE IsDeleted = 1 
   AND ( @MustHasPicture <> 1 OR 
         (@MustHasPicture = 1 AND l.id IN (
              SELECT listingid
              FROM ListingPictures
            )
         )
       )

他のヒント

ケースを実行する必要がありません - 。andの最初の部分が失敗した場合、2番目の部分は実行されませんが、

select
  *
from
  Listing l
Where
 l.IsDeleted = 1
 and ((@MustHasPicture = 1 and exists (...)) or 1)

これは何約1:

SELECT * FROM Listing l 
WHERE l.IsDeleted = 1 
AND (@MustHasPicture = 1 
    AND EXISTS(SELECT * FROM [dbo].[ListingPictures] AS [lp]  
    WHERE lp.ListingID = l.ID) 
OR @MustHasPicture = 0)

しかし、ここから値@MustHasPicture来るのでしょうか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top