我有一个非关系数据库,并使用Neo4j密码查询。我已经多次看到这个问题,但我似乎不能让它为我的查询工作。基本上,我从DB返回特定类型的所有节点。节点的类型称为人。从中,我找到了与MARRIED_TO关系中的原始Person相关的节点。并非所有的原始节点都具有MARRIED_TO关系。对于这些,我想返回null。我试过使用可选的MATCH,但这似乎也不起作用。
OPTIONAL MATCH (p:Person)-[m:MARRIED_TO]-(p2:Person)
Return p.name as Name, p2.name as Spouse
ORDER By Name, Spouse
返回有关系的原始节点,但不返回没有对应的MARRIED_TO关系的节点。
下面只返回两个空列
OPTIONAL MATCH (p:Person)-[m:MARRIED_TO]-(p2:Person)
WHERE (m) is null
Return p.name as Name, p2.name as Spouse
ORDER By Name, Spouse
感谢你所能提供的任何帮助。
MATCH (p:Person)
WITH p
OPTIONAL MATCH (p)-[:MARRIED_TO]-(p2)
RETURN p.name, p2.name
这返回
╒═══════════╤═════════╕
│"p.name" │"p2.name"│
╞═══════════╪═════════╡
│"Anna" │"Ben" │
├───────────┼─────────┤
│"Ben" │"Anna" │
├───────────┼─────────┤
│"Catherine" │null │
└───────────┴─────────┘
诀窍是匹配您想要返回的所有节点(在本例中是所有Person节点),然后可选地匹配它们的配偶。