[英]SQL Where IN with CASE
I have a where clause as such 我有这样的where子句
... 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. 但nto似乎有效。 Any way I can get it to work as such.
我可以通过任何方式使其正常工作。
I'd recommend an EXISTS
instead of an IN
: 我建议使用
EXISTS
而不是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. 假设
Trucks
有零个或一个Vantbl
/ SUBtbl
记录,请尝试此操作。
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
? 我不了解
CASE
但您是否考虑过使用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: 在基本的布尔逻辑可以做到的情况下,无需CASE:
...
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.) (假设
Vantbl.VanID
和SUVtbl.SUVID
不能为NULL。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.