繁体   English   中英

SQL WASE IN与CASE

[英]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.VanIDSUVtbl.SUVID不能为NULL。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM