gpt4 book ai didi

Neo4j 密码查询 : Parenthesis not considered in WHERE clause?

转载 作者:行者123 更新时间:2023-12-04 10:46:11 27 4
gpt4 key购买 nike

我正在尝试运行如下查询:

MATCH (n:Type1)-[:relation1]->(:Type1)<-[:relation2]-(:Type2) WHERE
((n.prop1="A" and n.prop2 in [42, 34]) OR
(n.prop1="B" and n.prop2 in [67]) OR
(n.prop1="C" and n.prop2 in [51, 43]) OR
(n.prop1="D" and n.prop2 in [56, 42]))
RETURN DISTINCT id(n) as node_id, n.prop3 as node_prop3, n.prop1 as prop1, n.prop2 as prop2;

这给出了混合结果,即 prop1="D"prop2=51 匹配,这显然不符合预期条件。就好像括号在条件的形成中没有发言权。当我在 WHERE 子句中运行不带括号的查询时,结果是相同的。

虽然,如果我查询类似:

MATCH (n:Type1)-[:relation1]->(:Type1)<-[:relation2]-(:Type2) WHERE
((n.prop1="A" and n.prop2=42) OR
(n.prop1="A" and n.prop2=34) OR
(n.prop1="B" and n.prop2=67) OR
(n.prop1="C" and n.prop2=51) OR
(n.prop1="C" and n.prop2=43) OR
(n.prop1="D" and n.prop2=56) OR
(n.prop1="D" and n.prop2=42))
RETURN DISTINCT id(n) as node_id, n.prop3 as node_prop3, n.prop1 as prop1, n.prop2 as prop2;

在将示例 2 中的单独条件替换为示例 1 中的 IN 以避免对 prop1 进行重复字符串比较时,我是否遗漏了什么?

最佳答案

我相信 IN 会按您的预期工作。

设置示例数据。

(:Type1 {prop1:"A", prop2:34}),
(:Type1 {prop1:"B", prop2:67}),
(:Type1 {prop1:"C", prop2:51}),
(:Type1 {prop1:"C", prop2:43}),
(:Type1 {prop1:"D", prop2:56}),
(:Type1 {prop1:"D", prop2:42}),
(:Type1 {prop1:"D", prop2:51}),
(:Type1 {prop1:"B", prop2:42});

MATCH (t:Type1)
MERGE (t)-[:relation1]->(:Type1)<-[:relation2]-(:Type2);

现在运行您的查询。

MATCH (n:Type1)-[:relation1]->(:Type1)<-[:relation2]-(:Type2) WHERE
((n.prop1="A" and n.prop2 in [42, 34]) OR
(n.prop1="B" and n.prop2 in [67]) OR
(n.prop1="C" and n.prop2 in [51, 43]) OR
(n.prop1="D" and n.prop2 in [56, 42]))
RETURN DISTINCT id(n) as node_id, n.prop3 as node_prop3, n.prop1 as prop1, n.prop2 as prop2;

语句返回7条记录,结果不包含prop1=D,prop2=51的节点。

参见 this answer如果您省略了括号,请参阅有关 bool 运算符优先级的信息。

关于Neo4j 密码查询 : Parenthesis not considered in WHERE clause?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59693817/

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