[英]Neo4j Cypher query: Parenthesis not considered in WHERE clause?
我正在嘗試運行如下查詢:
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 的節點。
如果省略括號,請參閱此答案以獲取有關布爾運算符優先級的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.