SQL Server حيث عبارة حالة البند؟
-
12-09-2019 - |
سؤال
لدي جملة حيث يتحقق من وجود صفوف في ورقة استقامة، لكنني أريد فقط تنفيذ هذا الشيك إذا تم ضبط بعض الشيء على 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
فشل، لن يتم تنفيذ الجزء الثاني.
select
*
from
Listing l
Where
l.IsDeleted = 1
and ((@MustHasPicture = 1 and exists (...)) or 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