首页 > 解决方案 > 将 Cypher 结果与 APOC SQL 查询相结合

问题描述

我正在尝试更新在虚拟环境中运行的 PostgreSQL 数据库的节点属性。我正在构建一个 Jazz 知识库,并希望使用节点 ID 从使用 APOC 的 PSQL 数据库中查询其他属性。

我尝试展开 id 并使用它们通过 APOC 运行 SQL 语句。

这是我迄今为止尝试过的代码:

MATCH (a:Artist)
WHERE a.genre = 'jazz'
WITH COLLECT(a.mbid) AS ids
UNWIND ids AS id
CALL apoc.load.jdbc('myDB',
"select DISTINCT a.gid, ar.name as country FROM artist a INNER JOIN area ar on a.area = ar.id WHERE a.gid = ?", [id]) YIELD row
MATCH (a:Artist) WHERE a.mbid = row.gid SET a.country = row.country
RETURN COUNT(a.country)

我遇到了一个错误,说“错误:运算符不存在:uuid = 字符变化”。无论如何,是否可以使用 Cypher 查询中的 id 通过带有 APOC 的单个 SQL 语句单独更新每个节点?

标签: sqlneo4jsubquerycypher

解决方案


假设该gid列是 Postgres 数据库中的 UUID 类型,并且错误是在通过 执行查询时apoc.load.jdbc,SQL 中的以下 ID 显式转换应该至少具有比较工作并且让查询返回一个可以比较的字符串值在:

MATCH (a:Artist)
WHERE a.genre = 'jazz'
WITH COLLECT(a.mbid) AS ids
UNWIND ids AS id
CALL apoc.load.jdbc('myDB',
"select DISTINCT a.gid::text, ar.name as country FROM artist a INNER JOIN area ar on a.area = ar.id WHERE a.gid = UUID(?)", [id]) YIELD row
MATCH (a:Artist) WHERE a.mbid = row.gid SET a.country = row.country
RETURN COUNT(a.country)

推荐阅读