SQL Server Где предложение Case Clause? - PullRequest
2 голосов
/ 03 ноября 2009

У меня есть предложение 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

Этот синтаксис неправильный, и я надеюсь, что кто-то может указать мне правильное направление. Спасибо.

Ответы [ 3 ]

3 голосов
/ 03 ноября 2009
SELECT * 
  FROM Listing l
 WHERE IsDeleted = 1 
   AND ( @MustHasPicture <> 1 OR 
         (@MustHasPicture = 1 AND l.id IN (
              SELECT listingid
              FROM ListingPictures
            )
         )
       )
1 голос
/ 03 ноября 2009

Нет необходимости делать случай - если первая часть and не пройдена, вторая часть не будет выполнена.

select
  *
from
  Listing l
Where
 l.IsDeleted = 1
 and ((@MustHasPicture = 1 and exists (...)) or 1)
0 голосов
/ 13 ноября 2009

А как насчет этого:

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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...