SQL Server in cui clausola case Dichiarazione?
-
12-09-2019 - |
Domanda
Ho una clausola WHERE che verifica l'esistenza di righe in una sottoquery, ma voglio solo eseguire tale verifica se un bit è impostato a 1. Così, per esempio:
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
Questa sintassi è sbagliata, e spero che qualcuno mi può puntare nella giusta direzione. Grazie.
Soluzione
SELECT *
FROM Listing l
WHERE IsDeleted = 1
AND ( @MustHasPicture <> 1 OR
(@MustHasPicture = 1 AND l.id IN (
SELECT listingid
FROM ListingPictures
)
)
)
Altri suggerimenti
Non c'è bisogno di fare un caso -. Se la prima parte di un and
non riesce, non verrà eseguita la seconda parte
select
*
from
Listing l
Where
l.IsDeleted = 1
and ((@MustHasPicture = 1 and exists (...)) or 1)
Che dire di questo:
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)
Ma da dove viene il Valore @MustHasPicture viene?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow