OrientDB嵌套查询问题:select edge where out=(select ...)无法执行
解决OrientDB子查询匹配
out边的失效问题 我完全懂你碰到的这个坑——直接用RID指定out的时候查询好好的,换成子查询就跑不起来了,这其实是OrientDB对子查询返回值的类型要求在搞鬼。
问题出在哪?
当你用=操作符来匹配out字段时,OrientDB要求右边必须是单个RID值,但你的两个无效查询都没满足这个条件:
- 第一个子查询
select from MyNodeType where name="this"返回的是完整的文档对象,不是单纯的RID - 第二个子查询
select @rid from (select from MyNodeType where name="this")虽然返回了RID,但默认是一个集合(哪怕只有一条结果),=运算符没法和集合类型做匹配
两种靠谱的解决办法
方法一:用
single()函数提取单个RID
如果你确定name="this"只会返回一条记录,用single()函数可以强制子查询返回单个标量值,完美适配=的要求:select from MyEdgeType where out = single(select @rid from MyNodeType where name="this")方法二:用
in操作符匹配集合
要是不确定结果数量(哪怕实际只有一条),换成in操作符就可以匹配子查询返回的集合了:select from MyEdgeType where out in (select @rid from MyNodeType where name="this")
小提示
你那个嵌套的子查询完全没必要,简化成select @rid from MyNodeType where name="this"就行,不用多套一层select from (...),写起来更清爽。
可以先单独执行select single(@rid) from MyNodeType where name="this",确认返回的是单个#10:0,再放到主查询里,就能正常跑通啦。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

