Cypher:使用多个基于空值的条件加载csv(neo4j)

55ooxyrt  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(221)

我刚进入密码查询时代。
我正在尝试加载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条件,但是得到了语法错误。

oxcyiej7

oxcyiej71#

这里有三个选项:
1.创建CSV时忽略具有空值的行。
1.建立节点,然后加入(使用set)属性,后者会略过没有属性的节点。
1.使用case语句为空值设置默认值。我的一个项目中的查询示例
merge(f:DNA_Match{fullname:trim(toString(第一行时的大小写.名字为空,然后''否则第一行。名字结束+第一行时的大小写.中间名为空,然后''否则' ' +第一行.中间名结束+第一行时的大小写.姓氏为空,然后''否则' ' +第一行.姓氏结束)})set f.名字=toString(第一行时的大小写.名字为空,然后''否则第一行.名字结束),f.中间名=toString(第一行时的大小写.中间名为空,然后''否则第一行.中间名结束),f.姓氏=trim(toString(第一行时的大小写.姓氏为空,然后''否则第一行.姓氏结束)))

相关问题