如何使用 in 运算符
How to use case with in operator
有这样的查询:
declare @case int = 1
SELECT a.column1,b.column2
FROM tbl1 a
INNER JOIN tbl2 b on a.id = b.id and a.category in(1,2,3,4,5)
需要@case = 1
时类别必须在(1,2,3,4,5),@case = 2
时类别必须在(1,2,4,5)。
像这样:
SELECT a.column1,b.column2
FROM tbl1 a
INNER JOIN tbl2 b on a.id = b.id and (CASE WHEN @case = 1 THEN a.category in(1,2,3,4,5) WHEN @case = 2 THEN (1,2,4,5) ELSE '')
怎么做?
SELECT a.column1,b.column2
FROM tbl1 a
INNER JOIN tbl2 b on a.id = b.id
and
(
(@case = 1 and a.category in (1,2,3,4,5)) OR
(@case = 2 and a.category in (1,2,4,5))
)
为了便于阅读,我添加了括号。并非所有这些都是必需的。
另一个答案更好,但如果你碰巧想用案例来做,你可以这样做
SELECT a.column1,b.column2
FROM tbl1 a
INNER JOIN tbl2 b on a.id = b.id and
( CASE WHEN @case = 1 and a.category in(1,2,3,4,5) THEN 1
WHEN @case = 2 and a.category in(1,2,3,4) THEN 1
ELSE 0
END
) = 1
有这样的查询:
declare @case int = 1
SELECT a.column1,b.column2
FROM tbl1 a
INNER JOIN tbl2 b on a.id = b.id and a.category in(1,2,3,4,5)
需要@case = 1
时类别必须在(1,2,3,4,5),@case = 2
时类别必须在(1,2,4,5)。
像这样:
SELECT a.column1,b.column2
FROM tbl1 a
INNER JOIN tbl2 b on a.id = b.id and (CASE WHEN @case = 1 THEN a.category in(1,2,3,4,5) WHEN @case = 2 THEN (1,2,4,5) ELSE '')
怎么做?
SELECT a.column1,b.column2
FROM tbl1 a
INNER JOIN tbl2 b on a.id = b.id
and
(
(@case = 1 and a.category in (1,2,3,4,5)) OR
(@case = 2 and a.category in (1,2,4,5))
)
为了便于阅读,我添加了括号。并非所有这些都是必需的。
另一个答案更好,但如果你碰巧想用案例来做,你可以这样做
SELECT a.column1,b.column2
FROM tbl1 a
INNER JOIN tbl2 b on a.id = b.id and
( CASE WHEN @case = 1 and a.category in(1,2,3,4,5) THEN 1
WHEN @case = 2 and a.category in(1,2,3,4) THEN 1
ELSE 0
END
) = 1