在下面的例子中,我创建了两个顶点(从b到a)之间的单向关系,有没有方法可以同时创建从(a到b)的关系?

SELECT *
FROM cypher('test_graph', $$
    MATCH (a:Person), (b:Person) WHERE a.name = 'hossam' AND b.name = 'omar'
    CREATE (b)-[r:REL {name: b.name+'->'+a.name}]->(a) RETURN r
$$) as (v agtype);

我try 删除(a)之前的箭头符号>,如: CREATE (b)-[r:REL {name: b.name+'->'+a.name}]-(a),但出现语法错误.

推荐答案

到目前为止,我认为实现双向关系最直接的方法是将其设置为属性,不能在创建的那一刻就删除方向.例如:

SELECT * FROM cypher ('graph', $$
MATCH (a:Person), (b:Person)
WHERE a.name = "hossam" AND b.name = "omar"
CREATE (a)-[e:FRIENDS]-(b)
RETURN e
$$) as (e agtype);

这将按照您所说的错误返回

ERROR:  only directed relationships are allowed in CREATE
LINE 4: CREATE (a)-[e:FRIENDS]-(b)

如果你使用双向边,同样的事情也会发生

SELECT * FROM cypher ('graph', $$
MATCH (a:Person), (b:Person)
WHERE a.name = "hossam" AND b.name = "omar"
CREATE (a)<-[e:FRIENDS]->(b)
RETURN e
$$) as (e agtype);
ERROR:  syntax error at or near ">"
LINE 4: CREATE (a)<-[e:BORDERS_WITH]->(b)

你需要try 一下这样的方法:

SELECT * FROM cypher ('graph', $$
MATCH (a:Person), (b:Person)
WHERE a.name = "hossam" AND b.name = "omar"
CREATE (a)-[e:FRIENDS{ type:"<->" }]->(b)
RETURN e
$$) as (e agtype);

通过将"<;->;"指定为属性,您可以使用以下命令搜索图形中的所有双向关系:

SELECT * FROM cypher ('graph', $$
MATCH (a)-[e:FRIENDS]->(b)
WHERE e.type = "<->"
RETURN e
$$) as (e agtype);

由于双向关系的功能还不受支持,我相信这是绕过这一点的一种方法.

Postgresql相关问答推荐

利用PostgreSQL查询中表的顺序来计算包含每次时间的时间范围

使用regexp获取表名

是否从表中 Select 值?巴什

Postgres:这是对OVERLAPS谓词的等效重写吗?

使用 pgx 扫描范围类型

Postgres 使用不同元素数据类型的订单数据

为什么在 PostgreSQL 中忽略查询超时?

Postgres 唯一 JSON 数组聚合值

sql:转换参数 $1 类型:不支持的类型 []int,in 的一部分

使用 ON CONFLICT 从 INSERT 返回行,无需更新

如何使用 pg_dump 或 psql 从 *.sql 恢复 PostgreSQL 表?

带有 postgres 的 DOCKER 容器,警告:could not open statistics file "pg_stat_tmp/global.stat": Operation not permitted

在 postgreSQL 中更改序列名称

Postgis 中 2 点之间的距离,单位为 4326 米

返回 array_agg() 中的第一个元素

将 Windows 上的 .sql 文件导入到 postgresql

Oracle 相当于 Postgres 的 DISTINCT ON?

PostgreSQL - 必须出现在 GROUP BY 子句中或在聚合函数中使用

PostgreSQL:从转储中恢复数据库 - 语法错误

如何在 postgres 查询中排名