我想在 neo4j 中执行此查询,但我没有得到正确的结果。
NOT((服务提供_由阿达尼传输有限公司和服务地址_福尔摩沙)或服务取决于视频采访数据)
MATCH (node:service )-[provid_by]->(dst:provider)
WITH DISTINCT node, COLLECT(DISTINCT TOLOWER(dst.name)) AS names
WHERE NONE(name IN names WHERE name IN ["adani transmission limited"]) OR size(names) = 0
WITH DISTINCT node
RETURN DISTINCT node
UNION
MATCH (node:service )-[address_in]->(dst:Address)
WITH DISTINCT node, COLLECT(DISTINCT TOLOWER(dst.name)) AS names
WHERE NONE(name IN names WHERE name IN ["formosa"]) OR size(names) = 0
WITH DISTINCT node
MATCH (node:service)-[depen_on]->(dst:res)
WITH DISTINCT node, COLLECT(DISTINCT TOLOWER(dst.name)) AS names
WHERE NONE(name IN names WHERE name IN ["video interview data"]) OR size(names) = 0
WITH DISTINCT node
WITH DISTINCT node
ORDER BY node.createdAt DESC
RETURN DISTINCT node
UNION
MATCH (node:service) WHERE NOT (node)-[:provid_by]->(:Participant)
WITH DISTINCT node
RETURN DISTINCT node
UNION
MATCH (node:service)
WHERE NOT (node)-[:address_in]->(:Address)
WITH DISTINCT node
RETURN DISTINCT node
UNION
MATCH (node:service)
WHERE NOT (node)-[:depen_on]->(:res)
WITH DISTINCT node
RETURN DISTINCT node
前 3 个
MATCH
子句在关系类型前面没有使用冒号。例如,[provid_by]
应该是 [:provid_by]
。这可能会或可能不会导致结果的差异,但它会减慢查询速度。
另一个问题,也是一个大问题,是
UNION
只能向最终结果添加行。它无法过滤掉其他 UNION
术语提供的任何行。
此外,还不清楚为什么你有最后 3 个
UNION
。他们只会添加大量不符合您规定标准的节点。
这个更简单的查询可能就足够了:
MATCH (node:service)
WHERE
(
NONE(n IN [(node)-[:provid_by]->(dst:provider)|dst.name] WHERE n =~ "(?i)Adani Transmission Limited") OR
NONE(n IN [(node)-[:address_in]->(dst:Address)|dst.name] WHERE n =~ "(?i)Formosa")
) AND
NONE(n IN [(node)-[:depen_on]->(dst:res)|dst.name] WHERE n =~ "(?i)Video interview data")
RETURN node
ORDER BY node.createdAt DESC