使用SQL在同一个类的节点之间创建边

时间:2016-05-16 08:05:20

标签: sql orientdb

我已经插入了一些“人物”类的顶点,我想在同一个城市的人之间创建边缘。这些顶点尚未与任何类型的边相互连接。

我相信一种方法是使用(标准)SQL,不管怎么说:

CREATE EDGE SameCity FROM (SELECT From People) A TO (SELECT FROM People) B WHERE A.@rid<>B.@rid AND A.city=B.city;

不幸的是,这不起作用,因为子查询名称不适用于OrientDB SQL。 你能帮我吗?

2 个答案:

答案 0 :(得分:0)

如果您需要让所有人都住在同一个城市,您可以稍微修改您的数据结构,以支持这一点:

----------    livesIn      --------
| People |  ----------->   | City |
----------                 --------

我创建了一个小数据示例:

create class people extends v
create property people.name string
create class city extends v
create property city.name string

create class livesIn extends e


create vertex people set name="pippo"
create vertex people set name="gigi"
create vertex people set name="pluto"

create vertex city set name="bergamo"
create vertex city set name="grassobbio"

create edge livesIn from (select from people where name = "pippo") to (select from city where name = "bergamo")
create edge livesIn from (select from people where name = "gigi") to (select from city where name = "grassobbio")
create edge livesIn from (select from people where name = "pluto") to (select from city where name = "bergamo")

screenshot

然后你可以获得所有人,例如住在贝加莫你可以用

select in("livesIn") from city where name = "bergamo"

select in("livesIn").name from city where name = "bergamo" unwind in

希望它有所帮助。 伊万

答案 1 :(得分:0)

我在阅读这篇文章后最终做到了: OrientDB - Create Edge using kind of self join

但是我不确定这是否是最快的方法(与SQL相比),但它确实有效,所以我现在就这样离开它。

编辑: 这个解决方案虽然需要将所有节点都带入内存,但效率不高(我将拥有数百万个节点,边缘将会更多)。使用SQL,因为索引也会更高效。 所以,如果有其他建议,我将非常感激!