2

我有一个 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

这种语法是错误的,我希望有人能指出我正确的方向。谢谢。

4

3 回答 3

3
SELECT * 
  FROM Listing l
 WHERE IsDeleted = 1 
   AND ( @MustHasPicture <> 1 OR 
         (@MustHasPicture = 1 AND l.id IN (
              SELECT listingid
              FROM ListingPictures
            )
         )
       )
于 2009-11-02T21:37:02.063 回答
1

不需要做一个案例——如果一个and失败的第一部分,第二部分将不会被执行。

select
  *
from
  Listing l
Where
 l.IsDeleted = 1
 and ((@MustHasPicture = 1 and exists (...)) or 1)
于 2009-11-02T21:28:50.937 回答
0

这个如何:

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 的价值从何而来?

于 2009-11-12T22:13:59.787 回答