Orientdb 如何获取连接Orient db中两个特定顶点的边
我尝试过文档和控制台,但没有找到一种方法来实现这一点 具有特性A的顶点、具有特性B的顶点和具有连接标签的边 我想找出连接这两个顶点的边,并得到边的id 我没能做到这一点。我能行Orientdb 如何获取连接Orient db中两个特定顶点的边,orientdb,Orientdb,我尝试过文档和控制台,但没有找到一种方法来实现这一点 具有特性A的顶点、具有特性B的顶点和具有连接标签的边 我想找出连接这两个顶点的边,并得到边的id 我没能做到这一点。我能行 select from (SELECT EXPAND(BOTH('Connected')) FROM Tag WHERE prop='A') where prop='B' 但我需要得到优势@rid。如果我把两者都改为两者,那么我怎么能特别要求带有B道具的标签呢 我也尝试过这样做: SELECT FROM Connect
select from (SELECT EXPAND(BOTH('Connected')) FROM Tag WHERE prop='A') where prop='B'
但我需要得到优势@rid。如果我把两者都改为两者,那么我怎么能特别要求带有B道具的标签呢
我也尝试过这样做:
SELECT FROM Connected WHERE IN=(SELECT FROM TAG WHERE prop = 'A') AND OUT = (SELECT FROM TAG WHERE prop = 'B')
但我没有从中得到任何东西
更新:
这就解决了问题,但难道没有更直接的方法吗?我想这会扫描带有给定标签的所有边。试试这个查询
select from Connected where out in (select from Tag WHERE prop = 'B' ) and in in (select from Tag WHERE prop = 'A' )
试试这个:
1:
2:
2b:
我不确定哪一个是最快的,您必须尝试一下,因为它取决于您的数据库和查询的其他部分。2b比2快,但只需极小的边距。从连接的where out in select from Tag where Tag='testTagA'和in in select from Tag where Tag='testTagB'或out in select from Tag where Tag='testTagB'和in in select from Tag where Tag='testTagA'这样做的技巧是肯定的。看起来有点过分,所以我想一定有更好的办法?否则,我将接受您的回答SELECT FROM Connected WHERE IN=SELECT FROM TAG WHERE prop='A'和OUT=SELECT FROM TAG WHERE prop='B'不返回结果,因为SELECT FROM TAB WHERE prop='A可以返回多个顶点。您也可以使用此查询从标记中选择outEConnected[in.prop=A],其中prop=b这是一个正确的答案,但我确实认为我们正在扫描所有连接的节点,而不是从图形节点A开始。我不知道no.1如何扫描。我现在也没有db条目,所以无法判断。是的,我们是。No.1扫描所有标记节点,这并不一定更好。如果您没有访问id的权限,最好的方法是在Tag.prop上使用索引。这样可以很快完成内部选择,这肯定是最快的解决方案。鉴于我的道具上有索引,你的建议是使用1号?当然,只要确保内部选择使用索引,它肯定会更快。
select from Connected where out in (select from Tag WHERE prop = 'B' ) and in in (select from Tag WHERE prop = 'A' )
SELECT FROM (
SELECT EXPAND(BOTHE('Connected')) FROM Tag WHERE prop='A'
) WHERE in.prop='B' or out.prop='B'
SELECT FROM Connected
WHERE (in.prop = 'A' AND out.prop = 'B') OR (in.prop = 'B' AND out.prop = 'A')
SELECT FROM Connected
LET $inProp = in.prop, $outProp = outProp = out.prop
WHERE ($inProp = 'A' AND $outProp = 'B') OR ($inProp = 'B' AND $outProp = 'A')