我有一个特定的问题来制作有条件的 create 语句。我不能用 MERGE
这里自 MATCH
和 CREATE
说法不同。这是查询..
....
WITH m
OPTIONAL MATCH (x)-[r1:FeedNext{user_id:USER_ID}]->(m)-[r2:FeedNext{user_id:USER_ID}]->(y)
WHERE x IS NOT NULL AND y IS NOT NULL
WITH x, y, m, r1, r2
CREATE (x)-[:FeedNext{user_id:USER_ID}]->(y)
DELETE r1, r2
RETURN m
返回 0 行 对于
x
的情况和 y
是 null
.虽然
m
不返回 null
对于运行相同的情况......
WITH m
OPTIONAL MATCH (x)-[r1:FeedNext{user_id:USER_ID}]->(m)-[r2:FeedNext{user_id:USER_ID}]->(y)
RETURN m
有什么办法可以返回
m
的值在所有情况下?
最佳答案
您的 WHERE
条件限制CREATE
通过确保它永远不会到达 if x
和 y
是 NULL
,然后是 RETURN
条款也没有达成。如果要返回是否创建,则只需过滤 CREATE
条款。一种方法是在 FOREACH
中创建和删除。条款。 FOREACH
子句接受一个集合,您可以通过在一种情况下让集合为空并包含 x,y
来进行过滤。在另一种情况下。带嵌套FOREACH
你可以这样做
....
WITH m
OPTIONAL MATCH (x)-[r1:FeedNext {user_id:{USER_ID}}]->(m)-[r2:FeedNext {user_id:{USER_ID}}]->(y)
FOREACH (a IN CASE WHEN x IS NULL THEN [] ELSE [x] END |
FOREACH (b IN CASE WHEN y IS NULL THEN [] ELSE [y] END |
CREATE a-[:FeedNext { user_id:{USER_ID}}]->b
DELETE r1, r2
)
)
RETURN m
关于Neo4j,密码 : Conditional Create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24803442/