Sql server 根据条件克隆某些关系
我将两个名为Keys的表和Acc tables的表作为CSV文件从SQL Server导出,并使用下面的命令将它们成功导入Neo4JSql server 根据条件克隆某些关系,sql-server,neo4j,impact-analysis,Sql Server,Neo4j,Impact Analysis,我将两个名为Keys的表和Acc tables的表作为CSV文件从SQL Server导出,并使用下面的命令将它们成功导入Neo4J CREATE INDEX ON :Keys(IdKey) USING PERIODIC COMMIT 500 LOAD CSV FROM 'file:///C:/Keys.txt' AS line MERGE (k:Keys { IdKey: line[0] }) SET k.KeyNam=line[1], k.KeyLib=line[2], k.KeyTyp
CREATE INDEX ON :Keys(IdKey)
USING PERIODIC COMMIT 500
LOAD CSV FROM 'file:///C:/Keys.txt' AS line
MERGE (k:Keys { IdKey: line[0] })
SET k.KeyNam=line[1], k.KeyLib=line[2], k.KeyTyp=line[3], k.KeySubTyp=line[4]
USING PERIODIC COMMIT 500
LOAD CSV FROM 'file:///C:/Acc.txt' AS line
MERGE (callerObject:Keys { IdKey : line[0] })
MERGE (calledObject:Keys { IdKey : line[1] })
MERGE (callerObject)-[rc:CALLS]->(calledObject)
SET rc.AccKnd=line[2], rc.Prop=line[3]
Keys代表源代码对象,Acc代表它们之间的关系。我为三个不同的应用程序项目导入了这两个表三次。因此,为了保持IdKey属性对于三个应用程序是唯一的,我在从sql server导出时将一个五个字符的前缀连接到IdKey,以标识应用程序的对象,因为我们不能像我从手册中学到的那样基于多个字段创建索引。现在,我的目标是构建应用程序之间的关系。例如:
- Node1是Application1的源代码对象
- Node2是Application1的另一个源代码对象
- Node3是Application2的源代码对象
MATCH (caller:Keys)-[rel:CALLS]->(called:Keys),(calledNew:Keys)
WHERE calledNew.KeyNam = called.KeyNam
and calledNew.IdKey <> called.IdKey
CREATE (caller)-[:CALLS]->(calledNew)
匹配(调用者:键)-[rel:CALLS]->(调用者:键),(调用者新建:键)
其中calledNew.KeyNam=called.KeyNam
并调用new.IdKey调用.IdKey
创建(调用者)-[:调用]->(调用者新建)
假设您也在:Keys(KeyNam)
上,下面的查询应该是有效的
直接在属性值之间进行比较时,Cypher不会使用索引。因此,此查询将每个调用方的所有调用名
放入名称
集合,然后在调用的new.KeyNam
和该集合中的项之间进行比较。这将导致使用索引,并将加快识别称为节点的潜在重复
此查询还执行NOT(调用者)-[:CALLS]->(calledNew)
检查,以避免在相同节点之间创建重复关系
MATCH (caller:Keys)-[rel:CALLS]->(called:Keys)
WITH caller, COLLECT(called.KeyNam) AS names
MATCH (calledNew:Keys)
WHERE calledNew.KeyNam IN names AND NOT (caller)-[:CALLS]->(calledNew)
CREATE (caller)-[:CALLS]->(calledNew)