I have a where clause as such
... Where TruckID IN (select VanID from Vantbl)
I like to use a case so it can be smart enough
I have the folloiwng
... Where TruckID IN
CASE WHEN @VehicleType = 'VAN'
THEN (select VanID from Vantbl)
CASE WHEN @VehicleType = 'SUV'
THEN (select SUVID from SUVtbl)
END
but does nto seem to work. Any way I can get it to work as such.
I'd recommend an EXISTS
instead of an IN
:
WHERE EXISTS (
SELECT 1
FROM Vantbl
WHERE @VehicleType = 'VAN' AND TruckID = VanID
) OR EXISTS (
SELECT 1
FROM SUVtbl
WHERE @VehicleType = 'SUV' AND TruckID = SUVID
)
Try this, assuming Trucks
has zero or one Vantbl
/ SUBtbl
records.
SELECT *
FROM Trucks t
LEFT JOIN Vantbl v ON v.VanID = t.TruckID
LEFT JOIN SUVtbl s ON s.SUVID = t.TruckID
WHERE (@VehicleType = 'VAN' AND v.VanID IS NOT NULL)
OR (@VehicleType = 'SUV' AND s.SUVID IS NOT NULL)
I don't know about CASE
but have you thought of using UNION ALL
?
(
SELECT ...
FROM ...
INNER JOIN VanTbl ON ...
WHERE @VehicleType = 'VAN'
)
UNION ALL
(
SELECT ...
FROM ...
INNER JOIN SUVtbl ON ...
WHERE @VecicleType = 'SUV'
);
No need for CASE where the basic Boolean logic would do:
...
WHERE
(@VehicleType = 'VAN' AND TruckID IN (SELECT VanID FROM Vantbl))
OR (@VehicleType = 'SUV' AND TruckID IN (SELECT SUVID FROM SUVtbl))
(Assuming Vantbl.VanID
and SUVtbl.SUVID
cannot be NULL.)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.