2016-05-16 8 views
1

クラス "People"の頂点をいくつか挿入しました。同じ都市に住む人々の間にエッジを作成したいと思います。これらの頂点は、どのタイプのエッジでも互いに接続されていません。私が行うための一つの方法は、(標準)SQLを使用して、だろうと信じてSQLを使用して同じクラスのノード間にエッジを作成

は、何らかの形で次のように:サブクエリ名はOrientDB SQLでは動作しませんので、残念ながら

CREATE EDGE SameCity FROM (SELECT From People) A TO (SELECT FROM People) B WHERE [email protected]<>[email protected] AND A.city=B.city; 

、これは、動作しません。 私を助けてもらえますか?

答えて

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 

でそれを行うことができますベルガモのグラムは、それがお役に立てば幸いです。 イワン

+0

Ivanさん、ありがとうございます。しかし、私は新しいクラスを作成しないでください。このプロパティ(都市)はあまり重要ではありません。 – ChrisB

0

私はこの記事を読んだ後、私は最終的にそれをやった: OrientDB - Create Edge using kind of self join

しかし、私はこれが(SQLと比較して)それを行うための最速の方法であるかどうかわからないが、それは働いていたので、私はつもりです今のようにそれを残す。

EDIT: この解決策では、すべてのノードをメモリに入れる必要がありますが、これは効率的ではありません(数百万のノードとエッジがさらに増えます)。 SQLでは、索引のために効率的になります。 別の提案があれば、本当に感謝しています!

関連する問題