gpt4 book ai didi

Neo4j 密码查询语言 - bool 表达式的运算顺序

转载 作者:行者123 更新时间:2023-12-02 04:06:26 25 4
gpt4 key购买 nike

我正在尝试编写一个查询来从 Neo4J 数据库中提取数据。假设有五个条件决定我是否要从数据库中提取 _____:A、B、C、D 和 E。决定这一点的 bool 表达式是:

A && B && (C || D || E)

通过搜索网络,我找不到任何有关 Neo4J AND 和 OR 查询所遵循的操作顺序的信息(AND 通常先于 OR),但从我的观察来看,它们似乎是按顺序执行的。由于我不知道如何显式定义顺序(即使用括号),因此如何实现 Cypher 查询来满足上面的 bool 表达式?

最佳答案

there is no way that I know of to explicitly define order, aka using parenthesis

别那么肯定。 ;)

首先,总是存在关联或分组,即使在它们按顺序执行的情况下它是隐式的。让我们看一个重要的案例。

MATCH (n) RETURN CASE WHEN false AND true OR true THEN 'and' ELSE 'or' END

(只要数据库中至少有一个节点,这一点就可以工作。)

必须等于((false and true) or true)(false and (true or true)),但这些都有不同的结果。

(false and true) or true => false or true => true
false and (true or true) => false and true => false

上面的查询将在第一种情况下返回“and”,在第二种情况下返回“or”,以显示哪个先执行。它返回“and”,因为它们是按顺序分组的。

MATCH (n) RETURN CASE WHEN ((false AND true) OR true) THEN 'and' ELSE 'or' END

这也会返回“and”,因为这是按顺序执行 bool 运算符时得到的隐含分组。

MATCH (n) RETURN CASE WHEN (false AND (true OR true)) THEN 'and' ELSE 'or' END

但这会返回“或”。

这是一个非常冗长的方式来说明添加括号确实是答案。


只是为了好玩,我尝试确定优先级,看起来 Neo 确实有 and-优先级:

MATCH (n) RETURN CASE WHEN true or true and false THEN 'and' ELSE 'or' END

如果或首先分组:

(true or true) and false => true and false => false

如果 and 首先分组:

true or (true and false) => true or false => true

上面的查询返回“and”,表示隐式分组的构造整体评估为 true(因此,尽管 and 按顺序出现在最后,但仍先分组)。

关于Neo4j 密码查询语言 - bool 表达式的运算顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39239723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com