2017-08-13 79 views
1

有三種節點類型:A,B和C.如何編寫這個Neo4j查詢?

我需要所有的A和B以及只有C參與完全一個關係。

match (n) 
where n:A or n:B or (n:C)-[]-() 
with count(n) as countOfRels 
where countOfRels > 0 
return n 

不接近,我知道。我不確定該從哪裏出發。

回答

2

這是一個有點奇怪的是A,B和C似乎不相關......但這裏是你如何能解決你的問題爲C:

MATCH (n:C) 
WHERE size((n)-[]-()) = 1 
RETURN n 
UNION 
MATCH (n:A) 
RETURN n 
UNION 
MATCH (n:B) 
RETURN n; 

希望這有助於。

問候, 湯姆

+0

我也需要甲和乙。 – nicomp

+1

你去那裏,更新:-) –

0

您可以使用此

match(n) 
where n:A OR n:B OR (n:C)-[r]-() 
with count(r) as countOfRels 
where countOfRels > 0 
return n 

希望這有助於。

0

你可以做MATCH (a)--() WHERE NOT()--(a)--()匹配「只有一個關係的節點」。之後,您可以使用UNION或COLLECT()+ UNWIND將單獨的查詢合併到一個行結果集中。

// using Union 
MATCH (n:C)--() 
WHERE NOT()--(n)--() 
RETURN n 
UNION 
MATCH (n:A) 
RETURN n 
UNION 
MATCH (n:B) 
RETURN n; 

// Using collect 
OPTIONAL MATCH (a:A) 
OPTIONAL MATCH (b:B) 
OPTIONAL MATCH (c:C)--() WHERE NOT()--(c)--() 
WITH COLLECT(a)+COLLECT(b)+COLLECT(c) as nodez 
UNWIND nodez as n 
RETURN DISTINCT n