-2 t-sql
我需要用CASE生成WHERE IN ()语句,我试试这个:
SELECT * FROM table
WHERE tbl_column IN ( CASE
WHEN @val = 1 THEN (SELECT * FROM (VALUES (2), (22)) AS X(a)
WHEN @val = 5 THEN (SELECT * FROM (VALUES (13), (18), (44)) AS X(a)
WHEN @val = 7 THEN (SELECT * FROM (VALUES (7)) AS X(a)
END
)
Run Code Online (Sandbox Code Playgroud)
但我收到错误:子查询返回了 1 个以上的值。
我应该怎么做?
您可以使用AND和OR:
SELECT *
FROM table
WHERE ( @val = 1 AND tbl_column IN (2, 22)
OR @val = 5 AND tbl_column IN (13, 18, 44)
OR @val = 7 AND tbl_column IN (7)
) ;
Run Code Online (Sandbox Code Playgroud)
或JOIN:
SELECT t.*
FROM table AS t
JOIN
(VALUES (1, 2), (1, 22),
(5, 13), (5, 18), (5, 44)
(7, 7)
) AS x (val, a)
ON @val = x.val
AND t.tbl_column = x.a ;
Run Code Online (Sandbox Code Playgroud)