如何在Cypher Neo4j中将多个WITH和MATCH子句结合起来

4
我正在处理一个由两个不同但相关的部分组成的问题。我想把它们结合起来。
1:第一部分
MATCH (r:Route)-[source_Airport_ID]->(a:Airport)
with count(r.SourceAirportID) as cnt, a.AirportID as          
NumberofAirports_Having_source_flightGreater300
where cnt>300
Return Count(NumberofAirports_Having_source_flightGreater300) 

2:第二部分

MATCH (r:Route)-[destination_Airport_ID]->(a:Airport) 
with count(r.SourceAirportID) as cnt, a.AirportID as  
NmberofAirports_Having_destination_flightGreater300
where cnt>300
Return Count(NumberofAirports_Having_destination_flightGreater300)

3:合并部分

MATCH (r:Route)-[source_Airport_ID]->(a:Airport) 
with count(r.SourceAirportID) as cnt, a.AirportID as   
NumberofAirports_Having_source_flightGreater300
where cnt>300

MATCH (r:Route)-[destination_Airport_ID]->(a:Airport) 
with count(r.SourceAirportID) as cnt, a.AirportID as     
NumberofAirports_Having_destination_flightGreater300,      
NumberofAirports_Having_source_flightGreater300
where cnt>300

Return      
Count(NumberofAirports_Having_source_flightGreater300),
Count(NumberofAirports_Having_destination_flightGreater300)

1:第一个查询结果是104。

2:第二个查询结果也是104。

3:但是当我将它们结合起来时,答案却变成了10816。如何将两者结合在一起,使得答案对于两个查询仍然都是104?


是100还是104? - cybersam
@cybersam 不好意思,是104。*已更正。 - Ahsan Ali
1个回答

3
这应该能够工作:
MATCH (r:Route)-[source_Airport_ID]->(a:Airport)
with count(r.SourceAirportID) as cnt, a.AirportID as          
NumberofAirports_Having_source_flightGreater300
where cnt>300
WITH COUNT(NumberofAirports_Having_source_flightGreater300) AS cnt1

MATCH (r:Route)-[destination_Airport_ID]->(a:Airport) 
WITH cnt1, count(r.SourceAirportID) as cnt, a.AirportID as  
NmberofAirports_Having_destination_flightGreater300
where cnt>300
Return cnt1, Count(NumberofAirports_Having_destination_flightGreater300) AS cnt2

你应该检查一下你的逻辑。这两个子查询做的事情完全相同。source_Airport_IDdestination_Airport_ID只是用作关系的临时名称。我希望你只是在测试或学习。 - cybersam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接