我刚进入密码查询时代。
我正在尝试加载csv并基于匹配创建两个节点之间的关系。两个节点之间的匹配需要依赖于csv数据,csv有分配数据,如,
Id,EmployeeId,DepartmentId,AppId,Name
11, 222, ,2, abc
12, , 433, pqr
13, , , xyz
我必须在Application
节点和Employee
节点之间建立关系,所以我查询如下:
LOAD CSV WITH HEADERS FROM 'file:///assignment.csv' as ass
MATCH(c:Application),(e:Employee)
WHERE
c.appId = ass.AppId
AND
e.employeeId= ass.employeeId AND e.departmentId= ass.departmentId // line 6
// here in line 6, condition should be based on null values of employeeId and departmentId
MERGE (e)-[r: OWNS
{assignment_id: ass.ID}]->(c)
对于某些分配,employeeId可以为空,因此在本例中,第6行条件如下所示
e.departmentId= ass.departmentId
对于某些分配,departmentId可以为空,因此在本例中,第6行条件如下所示
e.employeeId= ass.employeeId
在某些情况下,employeeId和departmentId都可以为空,因此,在这种情况下,应该存在任何条件,或者可以是true=true
我尝试了ForEach(),UNWIND,但是得到了语法错误。我尝试了CASE WHEN条件,但是得到了语法错误。
1条答案
按热度按时间oxcyiej71#
这里有三个选项:
1.创建CSV时忽略具有空值的行。
1.建立节点,然后加入(使用set)属性,后者会略过没有属性的节点。
1.使用case语句为空值设置默认值。我的一个项目中的查询示例
merge(f:DNA_Match{fullname:trim(toString(第一行时的大小写.名字为空,然后''否则第一行。名字结束+第一行时的大小写.中间名为空,然后''否则' ' +第一行.中间名结束+第一行时的大小写.姓氏为空,然后''否则' ' +第一行.姓氏结束)})set f.名字=toString(第一行时的大小写.名字为空,然后''否则第一行.名字结束),f.中间名=toString(第一行时的大小写.中间名为空,然后''否则第一行.中间名结束),f.姓氏=trim(toString(第一行时的大小写.姓氏为空,然后''否则第一行.姓氏结束)))