建立两个列之间的关系,其中一个列具有重复数据

时间:2019-02-27 16:57:34

标签: neo4j cypher

以下数据集已导入Neo4j。我需要建立一个关系,指示Table_ID包含Column_ID中的数据。

Table_ID    Table       Column_ID   Column
8       Product     1753        Key
8       Product     1754        Lock
8       Product     1755        Switch
8       Product     1756        Bolt
9       Catalogue   1761        Key
9       Catalogue   1762        Wrench
9       Catalogue   1763        Spanner
9       Catalogue   1764        Screw
9       Catalogue   1765        Bolt

要创建一个关系,指示Table_Id包含Column_id。

CREATE CONSTRAINT ON (c:Column_ID) ASSERT c.id IS UNIQUE;

CREATE CONSTRAINT ON (t:Table_ID) ASSERT t.id IS UNIQUE;

LOAD CSV WITH HEADERS FROM "file:///Tableid_ColumnID.csv" AS line

MATCH (c:Column {id: toInteger (line.Column_ID)}) 

MATCH (t:Table {id: toInteger (line.Table_ID)})

MERGE (t)-[:CONTAINS]->(c)

查询返回(无更改,无记录)。有人可以帮忙这个查询吗?

2 个答案:

答案 0 :(得分:1)

  1. 默认情况下, const appRoutes: Routes = [ {path: '', redirectTo: '/home', pathMatch: 'full'}, {path: 'login', component: StudentLoginComponent}, {path: 'teachersLogin', component: TeacherLoginComponent}, {path: 'adminLogin', component: AdminLoginComponent}, {path: 'home', component: HomeComponent}, {path: 'about-us', component: AboutComponent}, { path: '', canActivateChild: [StudentAuthGuard], children: [ {path: 'myAttendance', component: MyAttendanceComponent} ] }, { path: '', canActivateChild: [TeacherAuthGuard], children: [ {path: 'studentList', component: StudentListComponent}, {path: 'studentCreate', component: StudentCreateComponent}, {path: 'studentCreate/:id', component: StudentCreateComponent}, {path: 'fillAttendance', component: AttendanceFillComponent}, ] }, { path: '', canActivateChild: [AdminAuthGuard], children: [ {path: 'studentList', component: StudentListComponent}, {path: 'studentCreate', component: StudentCreateComponent}, {path: 'studentCreate/:id', component: StudentCreateComponent}, {path: 'teacherList', component: TeacherListComponent}, {path: 'teacherCreate', component: TeacherCreateComponent}, {path: 'teacherCreate/:id', component: TeacherCreateComponent} ] } ]; 使用逗号作为数据分隔符。您的数据文件使用一个或两个标签作为分隔符。因此,请改用此数据:

    LOAD CSV
  2. 您没有显示如何创建初始节点,因此这里是一个示例说明(请注意,节点标签为Table_ID,Table,Column_ID,Column 8,Product,1753,Key 8,Product,1754,Lock 8,Product,1755,Switch 8,Product,1756,Bolt 9,Catalogue,1761,Key 9,Catalogue,1762,Wrench 9,Catalogue,1763,Spanner 9,Catalogue,1764,Screw 9,Catalogue,1765,Bolt Column,而不是{{1 }}和Table)使用您的csv文件:

    Column_ID
  3. 鉴于上述节点标签,未正确创建约束,因为您没有任何带有Table_IDLOAD CSV WITH HEADERS FROM "file:///Tableid_ColumnID.csv" AS line MERGE (c:Column {id: TOINTEGER(line.Column_ID)}) ON CREATE SET c.name = line.Column MERGE (t:Table {id: TOINTEGER(line.Table_ID)}) ON CREATE SET t.name = line.Table 标签的节点。这是更正后的语句:

    Column_ID
  4. 通过上述修复,您的查询(以下重复)现在将按预期工作:

    Table_ID

答案 1 :(得分:0)

这将表明匹配项之一失败(因此:Column和:Table节点未正确导入或根本未导入,或者标签和属性的拼写和/或大小写均未导入)匹配实际导入的对象),或者您要合并的关系已经在所有匹配的节点之间存在。

您可能要运行查询的概要文件(这应该是安全的,因为结果没有修改图形中的内容),并确保匹配项导致行,并且在行中存在非零行数合并关系的时间点,或者从CSV中检查自己是否有数量有限的行,这些行实际上与ct的匹配成功(LIMIT行,保留匹配并返回它们,避免合并)。

这应该告诉您问题是否出在匹配项上,或者合并是否简单地与现有关系匹配(意味着此导入以前已经执行过)。