SQL ServerのWhere句case文?
-
12-09-2019 - |
質問
私は、サブクエリ内の行の有無をチェックする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来るのでしょうか?
所属していません StackOverflow