2014-04-21 2 views
0

수신 및 발신 관계가 모두있는 노드를 삭제하려고합니다.모든 수신 및 발신 관계가있는 노드 삭제

이 들어오고 나가는 관계는 선택 사항입니다.

(t:Teacher)-[:TEACHES]->(s:Student) 
(s:Student)-[:ATTENDS]->(c:Class) 

학생 노드는 교사와 선택적 관계이며 클래스와 선택적 관계입니다.

{id : 1}의 학생 노드를 삭제하고 싶습니다.

나는 모든 노드와의 관계를 삭제하는 방법을 알고 : 특정 노드로 변환 할

MATCH (n) 
OPTIONAL MATCH (n)-[r]-() 
DELETE n,r 

하지만이 수. 도와주세요.

답변

1

그냥 id에 의해 첫 경기 절에 만약 대신

MATCH (s:Student {id:1}) 
OPTIONAL MATCH s-[r]-() 
DELETE r, s 

를 판별 속성을 추가 (jjaderberg의 의견에 따라 업데이트 된)를 설정 한 속성이 아니라 내부 노드 ID를 의미하는 경우

MATCH (s) 
WHERE ID (s) = 1 
OPTIONAL MATCH s-[r]-() 
DELETE r, s 

해야합니다. 불규칙적이며 대개 내부 ID로 노드를 유지하는 것은 좋지 않습니다.

1

당신은 매우 가까운 위치 :

match (n:Student) 
where n.studentid = 2224 
optional match (n)-[r]-() 
delete n,r 

+0

시도했지만 실패했습니다. 오류 발생 : 'javax.transaction.HeuristicRollbackException : 트랜잭션을 커밋하지 못했습니다. 트랜잭션 (866, 소유자 : "qtp1165358333-120") [STATUS_NO_TRANSACTION, 리소스 = 1], 트랜잭션이 롤백 됨 ---> javax.transaction.xa.XAException' –

+0

원래의 쿼리는 좋았지 만 첫 번째 'MATCH' 절과 함께 WHERE 절을 사용해야합니다. 'n.id'는'id'라는 속성입니다. 'ID (n)'은 속성이 아닌 내부 노드 ID를 참조합니다. 옵션 일치는 관계가없는 경우에도 노드를 h 제하는 데 필요합니다. – jjaderberg

+0

좋은 캐치 - 내가 원래 이유가 그것을 넣어 알았어 .. :) –

관련 문제