Neo4j Cypher:嵌套 case 语句

neo*_*an1 7 neo4j cypher

cypher 中是否有嵌套 case 语句或 Decode 或 Map 的方法?

Case when  object1 = 'Animal'
       then case when object2 = 'CAT' then 1 else 0
                 when object2 = 'RAT' then 2 else 0
       else -9 end 
 end
Run Code Online (Sandbox Code Playgroud)

不存在语法问题,但内部案例中的值不会传递到外部案例。甚至尝试为变量添加别名。我什至尝试过以下方法:

case object1 = 'Animal'
      when object2 = 'CAT' then 1 
      when object2 = 'RAT' then 2
 end
Run Code Online (Sandbox Code Playgroud)

这甚至也不起作用。由于“case object1 = 'Animal'”不被视为 IF 条件....仅在 WHEN 中猜测。

std*_*b-- 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
Run Code Online (Sandbox Code Playgroud)

或者您可以使用地图:

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
Run Code Online (Sandbox Code Playgroud)