[英]SQL Where IN with CASE
我有這樣的where子句
... Where TruckID IN (select VanID from Vantbl)
我喜歡用一個案例,這樣可以足夠聰明
我有以下
... Where TruckID IN
CASE WHEN @VehicleType = 'VAN'
THEN (select VanID from Vantbl)
CASE WHEN @VehicleType = 'SUV'
THEN (select SUVID from SUVtbl)
END
但nto似乎有效。 我可以通過任何方式使其正常工作。
我建議使用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
)
假設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)
我不了解CASE
但您是否考慮過使用UNION ALL
?
(
SELECT ...
FROM ...
INNER JOIN VanTbl ON ...
WHERE @VehicleType = 'VAN'
)
UNION ALL
(
SELECT ...
FROM ...
INNER JOIN SUVtbl ON ...
WHERE @VecicleType = 'SUV'
);
在基本的布爾邏輯可以做到的情況下,無需CASE:
...
WHERE
(@VehicleType = 'VAN' AND TruckID IN (SELECT VanID FROM Vantbl))
OR (@VehicleType = 'SUV' AND TruckID IN (SELECT SUVID FROM SUVtbl))
(假設Vantbl.VanID
和SUVtbl.SUVID
不能為NULL。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.