OrientDB查询问题:如何用SELECT关联查询Test1.a与Test2.c字段
解决方案:用SELECT+EXPAND实现关联边与顶点属性的行式输出
针对你的数据结构:[Vertex|Company] <-- [Edge|Test1 {'a':'b'}] -- [Vertex|Test2 {'c':'de'}],要通过CompanyID查询关联的Test1.a和Test2.c并每行展开结果,无需使用MATCH语法的话,可以用SELECT结合EXPAND来实现:
正确查询语句
SELECT edge.a, edge.outV().c FROM ( SELECT expand(inE('Test1')) as edge FROM Company WHERE CompanyID = 123 )
逻辑说明
- 子查询部分:从指定CompanyID的顶点出发,用
inE('Test1')获取所有指向它的Test1边,再通过expand()把边集合展开为单条边的记录,让外层查询能遍历每条独立的边。 - 外层查询:针对每条展开的边,直接取边的
a属性,同时通过outV()获取这条边关联的Test2顶点,再提取其c属性。这样每条结果行就对应一组a和c的配对值,完全符合你要的展开格式。
你之前尝试的问题分析
- 第一个查询:
inV(Test2)语法逻辑错误,Test2是Test1边的出顶点(outV)而非入顶点,且直接嵌套inE().a会返回集合而非单值,无法正确配对属性。 - 第二个查询:TRAVERSE会把边和顶点作为独立记录返回,导致
a(边属性)和c(顶点属性)分行显示,无法形成配对组。 - 第三个查询:
bothE()和both()返回的都是集合类型结果,最终会以分组形式展示,无法展开为单行单组数据。
内容的提问来源于stack exchange,提问作者Antony
相关产品推荐
相关产品推荐

