Neo4j Cypher:MERGE有条件地使用来自LOAD CSV的值

bic*_*nce 4 csv neo4j cypher

我正在尝试从CSV导入,其中某些行具有帐号,而有些行则没有.如果帐户确实有数字,我想使用它们合并:会有记录,其中帐户上的名称已更改但数字将始终保持不变.对于没有帐号的其他记录,我能做的最好就是合并帐户名.

所以我真的需要某种条件:如果一行有一个帐号,请合并,否则合并帐户名.就像是...

LOAD CSV WITH HEADERS FROM 'file:///testfile.csv' AS line
MERGE (x:Thing {
  CASE line.accountNumber WHEN NULL
    THEN name: line.accountName
    ELSE number: line.accountNumber
  END
})
ON CREATE SET
x.name = line.accountName,
x.number = line.accountNumber
Run Code Online (Sandbox Code Playgroud)

虽然当然不起作用.有任何想法吗?

Nic*_*ite 10

要在LOAD CSV中测试.csv文件中的"NULL"值,您必须测试空字符串.

testfile.csv

acct_name,acct_num
John,1
Stacey,2
Alice,
Bob,4
Run Code Online (Sandbox Code Playgroud)

这假设帐户名称是唯一的......

LOAD CSV WITH HEADERS FROM 'file:///testfile.csv' AS line

// If acct_num is not null, merge on account number and set name if node is created instead of found.
FOREACH(number IN (CASE WHEN line.acct_num <> "" THEN [TOINT(line.acct_num)] ELSE [] END) |
    MERGE (x:Thing {number:number})
    ON CREATE SET x.name = line.acct_name
)

// If acct_num is null, merge on account name. This node will not have an account number if it is created instead of matched.
FOREACH(name IN (CASE WHEN line.acct_num = "" THEN [line.acct_name] ELSE [] END) |
    MERGE (x:Thing {name:name})
)
Run Code Online (Sandbox Code Playgroud)

  • 我们将在某个时刻添加条件更新语句,目前它是一种解决方法. (2认同)
  • 它曾经添加过吗? (2认同)