Neo4j Cypher中的意外行为

Neo4j Cypher中的意外行为,neo4j,cypher,Neo4j,Cypher,在使用Neo4j shell的Neo4j Cypher中,我可以基于如下属性建立与单个节点的关系: match (p:Taxon{taxId:'9605'}),(t:Taxon{parentTaxId:p.taxId}) create unique (p)-[:PARENT_OF]->(t); 在p中设置taxId后,它将按预期运行,并根据需要创建关系。但是,当我尝试通过将查询更改为将其应用于所有节点时: match (p:Taxon),(t:Taxon{parentTaxId:p.t

在使用Neo4j shell的Neo4j Cypher中,我可以基于如下属性建立与单个节点的关系:

match (p:Taxon{taxId:'9605'}),(t:Taxon{parentTaxId:p.taxId}) 
create unique (p)-[:PARENT_OF]->(t);
在p中设置taxId后,它将按预期运行,并根据需要创建关系。但是,当我尝试通过将查询更改为将其应用于所有节点时:

match (p:Taxon),(t:Taxon{parentTaxId:p.taxId}) 
create unique (p)-[:PARENT_OF]->(t);
我得到一个错误:

NotFoundException:未知标识符
t


我不明白为什么t现在无效。我是否遗漏了一些明显的内容?

我认为您需要将其分为WHERE子句:

MATCH (p:Taxon),(t:Taxon)
WHERE t.parentTaxId=p.taxId 
CREATE UNIQUE (p)-[:PARENT_OF]->(t);

啊,我明白发生了什么。第二个查询不起作用,因为存在没有子类的分类群。在这种情况下,找不到t,因此没有要创建关系的t。是否可以在where子句中放入一些内容来检测是否未找到t?例如:match(p:Taxon),(t:Taxon{parentTaxId:p.taxId}),其中not(t为null)创建unique(p)-[:PARENT\u]->(t);还尝试了:\match(t:Taxon),(p:Taxon{taxId:t.parentTaxId}),其中HAS(t.parentTaxId)创建了唯一的(p)-[:PARENT_OF]->(t);