sql - PL/SQL Case When - 将输入映射到其他列值
问题描述
我在 Stack 的其他地方检查过,但找不到类似的情况。
我想将 PL/SQL 过程中的 1 个输入映射到 MY_TABLE 中的 3 个不同值;否则我只想过滤输入。我想要一个类似于以下伪代码的解决方案
SELECT * FROM MY_TABLE
WHERE COLUMN 1 = 'B'
AND CASE WHEN p_input = 'F' THEN COLUMN_1 IN ('F','A','B')
ELSE COLUMN_1 = p_input;
解决方案
如果您正在学习如何使用case..when
inwhere
子句,那么以下是代码:
CASE WHEN p_input = 'F' AND COLUMN_1 IN ('F','A','B') THEN 1
WHEN COLUMN_1 = p_input THEN 1
END = 1
但是正如其他答案中所建议的那样,建议使用并且在第二个条件中or
使用否定条件总是一个好主意,同时使用如下:p_input <> 'F'
OR
(
(p_input = 'F' AND COLUMN_1 IN ('F', 'A', 'B'))
OR
(p_input <> 'F' AND COLUMN_1 = p_input)
)