postgresql 如何在Apache AGE中使用OpenCypher实现两个顺序的(MATCH,SET)查询对?

jm81lzqq  于 2023-05-06  发布在  PostgreSQL
关注(0)|答案(3)|浏览(139)

我试图实现两个顺序对(MATCH,SET)如下代码,请注意,下面的例子可以替换为一个(MATCH,SET)对,因为这个例子只是为了演示目的,但在我的情况下,两个顺序对是必须的:

SELECT * FROM cypher('test', $$
MATCH (a: person {name:'yousef'})  SET a.name = 'yousef222' RETURN n.name MATCH(b:person {name: 'mostafa'}) SET b.name = 'mostafa222' RETURN a.name ,b.name
$$) as (a_name agtype, b_name agtype);

当我运行查询时,我得到以下错误:

ERROR:  syntax error at or near "MATCH"
LINE 2: ...name:'hla'})  SET n.name = 'hlaaaa' RETURN n.name MATCH(b:pe...
                                                             ^

如何在维护两个顺序对的同时解决问题?

zvms9eto

zvms9eto1#

你需要像这样使用WITH...AS子句:

SELECT * FROM cypher ('test', $$ MATCH (a: person {name: 'yousef'}) 
SET a.name = 'yousef222' 
WITH a.name 
AS a_name 
MATCH (b: person {name: 'mostafa'}) 
SET b.name = 'mostafa222' 
RETURN a_name, b.name $$) 
AS (a_name agtype, b_name agtype);
ttisahbt

ttisahbt2#

您遇到的synatax错误是因为您使用了n.name,而n未在查询中定义,但您可以通过修改查询来实现两个顺序对(MATCH/SET),如下所示:

SELECT * FROM cypher('test', $$
MATCH (a: person {name:'yousef'})
MATCH (b:person {name: 'mostafa'})
SET a.name = 'yousef222', b.name = 'mostafa222'
RETURN a.name, b.name
$$) AS (a_name agtype, b_name agtype);

希望这能帮上忙。

watbbzwu

watbbzwu3#

这里的问题是你试图在一个单独的对中使用MATCH-SET对的查询。你只能有一个MATCH子句来返回一个结果,因此将你的查询分割成两个单独的密码。

SELECT * FROM cypher ("name_here", $$ MATCH (a:person{name: "your_name"})

 SET  a.name= "name_here" RETURN n.name $$ ) as (a_name agtype)'

类似写另一个这样

相关问题