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 中猜测。
如果使用嵌套情况:
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)