SQL Server donde Declaración Caso cláusula?
-
12-09-2019 - |
Pregunta
Tengo una cláusula WHERE que comprueba la existencia de filas en una subconsulta, pero yo sólo quiero ejecutar ese cheque si un bit se pone a 1. Así, por ejemplo:
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
Esta sintaxis es incorrecta, y estoy esperando que alguien me puede apuntar en la dirección correcta. Gracias.
Solución
SELECT *
FROM Listing l
WHERE IsDeleted = 1
AND ( @MustHasPicture <> 1 OR
(@MustHasPicture = 1 AND l.id IN (
SELECT listingid
FROM ListingPictures
)
)
)
Otros consejos
No hay necesidad de hacer un caso -. Si la primera parte de una and
falla, no se realizará la segunda parte
select
*
from
Listing l
Where
l.IsDeleted = 1
and ((@MustHasPicture = 1 and exists (...)) or 1)
¿Qué pasa con éste:
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)
Pero ¿de dónde viene el valor de @MustHasPicture?
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow