繁体   English   中英

Neo4j Cypher:嵌套的case语句

[英]Neo4j Cypher : nested case statement

在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

没有语法问题,但是内部的值不会传递给外壳。 甚至试了一个变量别名。 我甚至尝试过以下方法:

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

这甚至都不起作用。 因为“case object1 ='Animal'”不被视为IF条件....只在WHEN中猜测。

如果使用嵌套案例:

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

或者您可以使用地图:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM