是否有一种使用多个where子句的方法,如下所示?目前,它将运行并处理第一个 WITH 之后的第一组 MERGE 子句,但运行和处理其他之后的第二和第三组 MERGE WITH 子句不运行。我认为是因为第一个 WITH 子句具有以下 WHERE NOT 子句,该子句过滤掉第二个和第三个 WITH 子句的要求? 有人知道一种在一个语句中仍然可以全部运行的方法吗?我正在通过Kettle运行此程序,出于我的目的,它必须在单个语句中。
LOAD CSV WITH HEADERS FROM 'file:///detail.csv' AS row
MERGE (gpath:GranPath {circPathInstID:row.CircPathInstID})
ON CREATE SET
gpath.circPathHumID = row.CircPathHumID,
gpath.category = row.Type,
ON MATCH SET
gpath.circPathHumID = row.CircPathHumID,
gpath.category = row.Type,
WITH row, gpath
WHERE NOT gpath.category IN ['ETHERNET','PRI TRUNKS','CUSTOMER SIP TRUNKS','ETHERNET TRANSPORT', 'EPON ETHERNET TRANSPORT']
MERGE (upath:UnmNonEthPath {name:row.CircPathHumID, status:row.CurrentPending})
MERGE (upath)-[:DATA_SOURCE {source:"GRANITE"}]->(gpath)
WITH row, gpath
WHERE gpath.category IN ['ETHERNET','PRI TRUNKS','CUSTOMER SIP TRUNKS']
MERGE (usvc:UnmService {name:row.CircPathHumID, status:row.CurrentPending})
MERGE (usvc)-[:DATA_SOURCE {source:"GRANITE"}]->(gpath)
WITH row, gpath
WHERE gpath.category IN ['ETHERNET TRANSPORT', 'EPON ETHERNET TRANSPORT']
MERGE (uxp:UnmTransport {name:row.CircPathHumID, status:row.CurrentPending})
MERGE (uxp)-[:DATA_SOURCE {source:"GRANITE"}]->(gpath)
答案 0 :(得分:0)
如果第三个WITH
子句之前的所有内容均按预期工作,那么它必须是失败的第三个WHERE
子句之后 的WITH
子句。
实际上,由于您的第二个WHERE
子句是这个(请注意NOT
):
WHERE NOT gpath.category IN [
'ETHERNET','PRI TRUNKS','CUSTOMER SIP TRUNKS',
'ETHERNET TRANSPORT','EPON ETHERNET TRANSPORT']
您的第三个是这个
WHERE gpath.category IN [
'ETHERNET','PRI TRUNKS','CUSTOMER SIP TRUNKS']
第三个WHERE
子句永远不可能成功。
如果您尝试有条件执行操作,则应查看Conditional Cypher Execution的APOC程序。在您的情况下,由于您有3个条件并想写入数据库,因此应考虑使用apoc.do.case。
例如:
LOAD CSV WITH HEADERS FROM 'file:///detail.csv' AS row
MERGE (gpath:GranPath {circPathInstID:row.CircPathInstID})
SET
gpath.circPathHumID = row.CircPathHumID,
gpath.category = row.Type
WITH row, gpath
CALL apoc.do.case(
[
gpath.category IN ['ETHERNET','PRI TRUNKS','CUSTOMER SIP TRUNKS'],
'MERGE (usvc:UnmService {name:row.CircPathHumID, status:row.CurrentPending})
MERGE (usvc)-[:DATA_SOURCE {source:"GRANITE"}]->(gpath)',
gpath.category IN ['ETHERNET TRANSPORT', 'EPON ETHERNET TRANSPORT'],
'MERGE (uxp:UnmTransport {name:row.CircPathHumID, status:row.CurrentPending})
MERGE (uxp)-[:DATA_SOURCE {source:"GRANITE"}]->(gpath)'
],
'MERGE (upath:UnmNonEthPath {name:row.CircPathHumID, status:row.CurrentPending})
MERGE (upath)-[:DATA_SOURCE {source:"GRANITE"}]->(gpath)',
{row: row, gpath: gpath})
YIELD value
RETURN gpath