Neo4j Cypher: 嵌套的 case 语句

7
在Cypher中是否有嵌套的case语句、解码或映射的方法?
Case when  object1 = 'Animal'
       then case when object2 = 'CAT' then 1 else 0
                 when object2 = 'RAT' then 2 else 0
       else -9 end 
 end

没有语法问题,但内部 case 的值未传递到外部 case。甚至尝试为变量设置别名。

我甚至尝试了以下操作:

case object1 = 'Animal'
      when object2 = 'CAT' then 1 
      when object2 = 'RAT' then 2
 end

这个也不行。因为 "case object1 = 'Animal'" 没有被当作 IF 条件处理......猜测只能在 WHEN 中使用。

1个回答

8

如果使用嵌套的情况:

UNWIND ['Human', 'Animal'] as var1
UNWIND ['CAT', 'RAT'] as var2
RETURN var1, var2,
       CASE WHEN var1 = 'Animal'
              THEN CASE WHEN var2 = 'CAT'
                          THEN 1
                        ELSE CASE WHEN var2 = 'RAT'
                                    THEN 2
                                  ELSE 0
                             END
                   END
            ELSE -9
       END as result

或者你可以使用map:

WITH  
     { Human: {
         __default: 101
       }, 
       Animal: {
         CAT: 1,
         RAT: 2,
         __default: 0
       },
       __default: -9
     } as tree
 UNWIND ['Human', 'Animal', 'Object'] as var1
 UNWIND ['RAT', 'CAT', 'DOG'] as var2
 RETURN var1, var2,
        CASE WHEN tree[var1] IS NULL THEN tree.__default 
             ELSE CASE WHEN tree[var1][var2] IS NULL THEN tree[var1].__default 
                       ELSE tree[var1][var2]
                  END
        END as result

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接