首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CQL语法异常

CQL语法异常
EN

Stack Overflow用户
提问于 2019-10-31 07:37:02
回答 2查看 38关注 0票数 0

Neo.ClientError.Statement.SyntaxError:无效输入‘):预期空格或关系模式(第66行,第100列(偏移号:1898年))“创建(z:订阅{ subscriptionId: subs.subscriptionId,startDate: subs.startDate,endDate:’})<-r:ASSOCIATION-(y:Person {nationalIdentityNumber: subs.nationalIdentityNumber,name: subs.name,姓氏: subs.surname,父名: subs.fathername,国籍: subs.nationality,passportNo: subs.passportNo,生日: subs.birthdate})”

我希望创建/合并节点和类型为人员、订阅和行的关系

如果我有相同的订阅,我应该检查到startDate,如果新数据的开始日期大于旧数据;我应该创建新订阅,并更改旧订阅的结束日期。

代码语言:javascript
复制
UNWIND  [{
msisdn:'99658321564',
name:'Lady',
surname:'Camble',
fatherName:'Aeron',
nationality:'EN',
passportNo:'PN-1234224',
birthDate:'12-05-1979',
nationalIdentityNumber:'112124224',
subscriptionId:'2009201999658321564',
startDate:'20-09-2019 12:00:12'
},{msisdn:'99658363275',
name:'John',
surname:'Mckeen',
fatherName:'Frank',
nationality:'EN',
passportNo:'PN-126587',
birthDate:'15-08-1998',
nationalIdentityNumber:'2548746542',
subscriptionId:'1506201999658363275',
startDate:'15-06-2019 13:00:12'}
{
msisdn:'99658321564',
name:'Lady',
surname:'Camble',
fatherName:'Aeron',
nationality:'EN',
passportNo:'PN-1234224',
birthDate:'12-05-1979',
nationalIdentityNumber:'112124224',
subscriptionId:'2009201999658321564',
startDate:'31-11-2019 12:00:12'
}
] as subs
MERGE (y:Person {nationalIdentityNumber: subs.nationalIdentityNumber, name:         subs.name, surname: subs.surname, fathername: subs.fathername , nationality: subs.nationality, passportNo: subs.passportNo, birthdate: subs.birthdate  })
MERGE (t:Subscription{subscriptionId:subs.subscriptionId })
MERGE (y)-[rel:ASSOCIATION]-(t)
ON MATCH SET
t.endDate = (case when t.startDate <subs.startDate then subs.startDate else '' 
end) 
MATCH (t:Subscription) where t.subscriprionId=subs.subscriprionId and
(CASE
WHEN  t.endDate=subs.startDate then 
CREATE (z:Subscription{ subscriptionId: subs.subscriptionId, startDate: subs.startDate, endDate:''})-[r:ASSOCIATION]-(y:Person {nationalIdentityNumber: subs.nationalIdentityNumber, name: subs.name, surname: subs.surname, fathername: subs.fathername , nationality: subs.nationality, passportNo: subs.passportNo, birthdate: subs.birthdate})
END)
 RETURN y
EN

回答 2

Stack Overflow用户

发布于 2019-10-31 13:37:56

代码语言:javascript
复制
UNWIND[...] as subs
MERGE (y:Person {nationalIdentityNumber: subs.nationalIdentityNumber, name: subs.name, surname: subs.surname, fatherName: subs.fatherName , nationality: subs.nationality, passportNo: subs.passportNo, birthDate: subs.birthDate  })
MERGE (t:Subscription{subscriptionId:subs.subscriptionId,startDate:subs.startDate,endDate:''})
MERGE (y)-[rel:ASSOCIATION]-(t)
MERGE(x:Subscription{subscriptionId:subs.subscriptionId, endDate:''})
SET
x.endDate = (case when x.startDate < subs.startDate then subs.startDate else null end);

CQL应该喜欢这个。谢谢我的同事。

票数 0
EN

Stack Overflow用户

发布于 2019-10-31 16:43:53

您试图通过CASE语句获得条件Cypher子句,但这是行不通的。在这种情况下,不能执行嵌套CREATE (或任何其他Cypher子句)。

但是,您可以使用FOREACH与CASE的技巧来模拟if条件。这在您的情况下应该有效,因为您只想在特定的条件下执行一个创建(虽然您已经为这个人匹配了y节点,所以只需在该创建中重用(y),而不是试图从标签和属性中再次定义整个节点,这将无法正常工作)。

如果您需要更高级的条件逻辑,可以通过APOC程序中的条件过程获得

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58638724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档