GQL是否支持无需预定义表的内嵌数据查询?求最简示例
GQL中无预定义图结构的内嵌数据查询实现
问题描述
在SQL中可以编写包含内嵌数据的查询,例如:
SELECT 1
或是更具代表性的示例:
WITH users as ( SELECT 1 id, "tom" name UNION ALL SELECT 2 id, "sandra" name ) SELECT * FROM users
请问在GQL中,是否存在无需依赖预定义节点/关系的类似实现方式?若存在,其最简示例是什么?比如是否支持如下形式的内嵌图数据查询:
GRAPH (...inline table... ?) MATCH (from_person:Person {name: "Dana"})-[:Owns]-> RETURN from_person.name
解答
在主流的GQL实现(如Neo4j Cypher)中,完全支持不依赖已有图结构的内嵌数据查询,核心通过临时构造节点、关系或属性集合实现,以下是几种典型场景的最简示例:
1. 单个内嵌数据项查询
直接构造单个数据对象并返回属性:
WITH {id: 1, name: "Tom"} AS user RETURN user.id, user.name
2. 多数据项集合查询(类似SQL WITH UNION)
通过数组定义多个数据项,再用UNWIND展开为行:
WITH [ {id: 1, name: "Tom"}, {id: 2, name: "Sandra"} ] AS users UNWIND users AS user RETURN user.id, user.name
3. 带关系的临时图查询
如果需要模拟图结构的关系查询,可以临时构造节点和关系,查询完成后清理数据避免残留:
-- 临时创建节点与关系 MERGE (dana:Person {name: "Dana"}) MERGE (car:Vehicle {name: "Tesla"}) MERGE (dana)-[:Owns]->(car) -- 执行查询 MATCH (from_person:Person {name: "Dana"})-[:Owns]->(owned) RETURN from_person.name AS owner, owned.name AS owned_item -- 清理临时数据 DETACH DELETE dana, car
关键说明
- GQL的内嵌数据以属性映射或节点数组为核心形式,贴合图数据库的结构特性;
UNWIND是将集合展开为单行数据的常用操作,等效于SQL中UNION ALL的批量数据展开效果;- 若需临时构造完整图关系,
MERGE+DETACH DELETE组合可确保查询后不遗留测试数据,不影响原有图结构。
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

