我试图了解是否正确地正确嵌套了这些case语句。这是嵌套这些内容的最佳方法吗?
为了解释我在这里试图做的是创建一个在单个表中查看三列的函数。根据找到的输入确定字符串结果。如果在第1列(也称为测试)中找不到输入,则将其移至第2列(移调),然后移至第3列(构造),直到找到结果或继续进行。
我不确定这是解决这种情况的最佳或正确方法。任何建议将不胜感激。
CREATE OR REPLACE FUNCTION any_class(test TEXT, transpose TEXT, construction TEXT) RETURNS TEXT AS $$
SELECT CASE
WHEN test IN ('a', 'b') THEN 'result1'
WHEN test IN ('c', 'd') THEN 'result2'
WHEN test IN ('e', 'f') THEN 'result3'
WHEN test IN ('g', 'h') THEN 'result4'
WHEN test IN ('i', 'j') THEN 'result5'
WHEN test IN ('k', 'l', 'm') THEN 'result6'
WHEN test IN ('n') THEN 'result7'
WHEN test IN ('o') THEN 'result8'
WHEN test IN ('p') THEN 'result9'
WHEN test IN ('q', 'r', 's', 't', 'u') THEN 'result10'
ELSE CASE
WHEN transpose IN ('a', 'b') THEN 'result1'
WHEN transpose IN ('c', 'd') THEN 'result2'
WHEN transpose IN ('e', 'f') THEN 'result3'
WHEN transpose IN ('g', 'h') THEN 'result4'
WHEN transpose IN ('i', 'j') THEN 'result5'
WHEN transpose IN ('k', 'l', 'm') THEN 'result6'
WHEN transpose IN ('n') THEN 'result7'
WHEN transpose IN ('o') THEN 'result8'
WHEN transpose IN ('p') THEN 'result9'
WHEN transpose IN ('q', 'r', 's', 't', 'u') THEN 'result10'
ELSE CASE
WHEN construction IN ('a', 'b') THEN 'result1'
WHEN construction IN ('c', 'd') THEN 'result2'
WHEN construction IN ('e', 'f') THEN 'result3'
WHEN construction IN ('g', 'h') THEN 'result4'
WHEN construction IN ('i', 'j') THEN 'result5'
WHEN construction IN ('k', 'l', 'm') THEN 'result6'
WHEN construction IN ('n') THEN 'result7'
WHEN construction IN ('o') THEN 'result8'
WHEN construction IN ('p') THEN 'result9'
WHEN construction IN ('q', 'r', 's', 't', 'u') THEN 'result10'
END
END
END;
$$
LANGUAGE SQL
IMMUTABLE PARALLEL SAFE;
您可以使用一个更大的case
表达式来执行此操作:
函数中的逻辑看起来不错,我认为它可以满足您的要求。
也许是数组重叠运算符&&
,它检查两个数组是否至少在一个元素上具有共同点,这会使事情变得容易一些。使用它,您不需要嵌套CASE
表达式,而只需嵌套一个。