sql - 东方数据库 SQL : How to find vertices and create edges between them?

标签 sql graph graph-databases orientdb

在我的数据库上运行以下查询:

SELECT @rid AS module_rid, out('USES').out('BELONGS_TO').@rid AS project_rid FROM MODULES LIMIT 10

我收到了以下回复:

module_rid | project_rid
-----------|----------------
#12:0      | []
#12:1      | []
#12:2      | []
#12:3      |        
#11:48677  | #11:48677 #11:48677 #11:48677 #11:48677 #11:48677 ..More(49)
#12:4      |        
#11:48677  | #11:48677 #11:48677 #11:48677 #11:48677 #11:48677 ..More(49)
#12:5      |        
#11:2526   | #11:2526 #11:2526 #11:47148 #11:47148 #11:25338 ..More(30)
#12:6      | []

如何在模块和它们所依赖的项目(它们至少使用项目的一个模块)之间创建边(例如 RELIES_ON)?

最佳答案

create class Module extends V
create class Project extends V

create class Uses extends E
create class ReliesOn extends E


create vertex Module set name = 'm1'
create vertex Module set name = 'm2'
create vertex Module set name = 'm3'

create vertex Project set name = 'p1'
create vertex Project set name = 'p2'
create vertex Project set name = 'p3'


create edge Uses from (select from Module where name = 'm2') to (select from Project where name = 'p1')
create edge Uses from (select from Module where name = 'm3') to (select from Project where name = 'p2')
create edge Uses from (select from Module where name = 'm3') to (select from Project where name = 'p3')

我知道上述情况与您的情况略有不同,但我相信这足以了解您问题的可能解决方案。

您可以定义一个函数createEdges,例如:

var gdb = orient.getGraph();

if(to.size() != 0){
    var command = "create edge ReliesOn from " + from + " to " + to;
    gdb.command("sql", command);
}
return;

enter image description here

现在以下查询将在创建边时查找顶点:

select from (
    select @rid as module_rid, out('Uses').@rid as project_rid from Module
)
let $ce = createEdges(module_rid, project_rid)

更新:

如果您想确保“to”不包含重复项,您可以:

select from (
    select @rid as module_rid, $aux[0].set.@rid as project_rid from Module
    let $aux = ( select set(out('Uses')) from $current )
) 
let $ce = createEdges(module_rid, project_rid)

关于sql - 东方数据库 SQL : How to find vertices and create edges between them?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29613647/

相关文章:

sql - 转储数据库的一些表

mysql - 如何显示与日期范围匹配的日期的匹配项

php - SQL 语句中的多个 BETWEEN 和 LIMIT 运算符

algorithm - 寻找距离房间最小连接距离的点

Neo4j - 不能在聚合函数中使用聚合函数

database - 数据如何存储在图数据库中?

空列上的android sqlite索引

graph - D3.js 多线图转换

算法题: Find the longest elementary cycle in a directed graph

algorithm - 在图中查找最接近匹配的高效算法