DELETE之后不执行任何操作



我有以下查询:

MATCH (u:User)
WHERE u.id = $userId
MERGE (p:Palette {name: $name})
ON CREATE 
SET p.name = $name
SET p.id = apoc.create.uuid()
MERGE (u)-[cr:CREATED]->(p)
MERGE (u)-[sa:SAVED]->(p)
WITH p MATCH (p)-[in:INCLUDES]->() 
DELETE in
WITH u MATCH (p:Palette)
WHERE (u)-[:SAVED]-() AND p.name = $name
FOREACH (color IN $colors |
MERGE (c:Color {hex: color.hex})
ON CREATE 
SET c.hex = color.hex
MERGE (p)-[inc:INCLUDES]->(c)

直到DELETE in,一切都按预期进行,然后什么也没发生。我得到以下错误:

Neo4j错误:输入"无效:应为")"CALL";"CREATE";"删除";"DETACH";"FOREACH";"LOAD";"MATCH";"合并";"ON";"可选的";"删除";"RETURN";"SET";"UNWIND";"USE";"WITH";

DELETE statement之后如何继续此查询?如果我将其分为两个查询(第一个查询以DELETE in结尾),那么一切都可以按预期进行。

如果我理解正确,DELETE之前的p和之后的p是一样的。如果是这种情况,请使用WITH来保留您已经搜索过的项目。所以你可以试试:

MATCH (u:User)
WHERE u.id = $userId
MERGE (p:Palette {name: $name})
ON CREATE 
SET p.name = $name
SET p.id = apoc.create.uuid()
MERGE (u)-[cr:CREATED]->(p)
MERGE (u)-[sa:SAVED]->(p)
WITH p, u MATCH (p)-[inc:INCLUDES]->() 
WITH p, u, inc
DELETE inc
WITH p
FOREACH (color IN $colors |
MERGE (c:Color {hex: color.hex})
ON CREATE 
SET c.hex = color.hex
MERGE (p)-[inc:INCLUDES]->(c)

我试过了:

MATCH (p:Palette)
WHERE p.name = "First test palette"
MATCH (p)-[inc:INCLUDES]->(c:Color)
WITH p, inc
DELETE inc
WITH p
MATCH (u)-[:SAVED]-(p)
RETURN u, p

关于此数据示例:

MERGE (e:User {name: "user"})
MERGE (a:Palette {name: "First test palette"})
MERGE (b:Color {hex: "#123123"})
MERGE (c:Color {hex: "#ffffff"})
MERGE (d:Color {hex: "#000000"})
MERGE (a)-[:INCLUDES]-(b)
MERGE (a)-[:INCLUDES]-(c) 
MERGE (a)-[:INCLUDES]-(d) 
MERGE (e)-[:SAVED]-(a) 

它如预期的那样发挥了作用。

相关内容

最新更新