2016-06-30 24 views
1

私は会社の合併買収情報のデータベースを編成しています。買収した企業のデータベースでは、現在の会社を探す必要があります。基本的には、私はすべてのノードのルートノードを見つける必要があります。neo4j Cypherクエリのすべてのノードのルートノードを検索

私はグラフベースのDBが良い選択肢かもしれないと思うので、Neo4jデータベースを使ってこれを試してみました。私の構造は次のようになります(適切な構文がないことを許してください)。

(Company)-[Acquired]->(Company)-[Acquired]->(Company)...etc. 

これは単一レベルである可能性があります。 1つの会社が他の会社を買収したのはそれが終わりだったのです。あるいは、1つの会社が別の会社を買収して別の会社を買収したなど、複数の層があるかもしれません。

私がしなければならないことは、各企業をデータベースにリストすることです(今のところ約500社です)。

SQLとその他の言語(Java、Python)を知っていますが、私のCypherクエリのスキルは現時点ではかなり貧弱ですが、オンラインでクエリ言語の包括的なガイドを見つけるのは難しいです。この場所をどこから始めるべきかを知っています。どんな助力も心から感謝します。ありがとう!

P.S.あなたがこの種のもの、またはより良いデータベース設計のためにどのDBを使用すべきかについてのよりよい考えがあれば、それを聞いてみたいです。

答えて

1

のは、一緒にサンプルデータセットを入れてみましょう:

CREATE (c1:Company {id:1}), 
     (c2:Company {id:2}), 
     (c3:Company {id:3}), 
     (c4:Company {id:4}), 
     (c5:Company {id:5}), 
     (c6:Company {id:6}), 
     (c7:Company {id:7}), 
     (c8:Company {id:8}), 
     (c9:Company {id:9}), 
     (c10:Company {id:10}), 

     (c2)-[:ACQUIRED]->(c3), 
     (c4)-[:ACQUIRED]->(c5)-[:ACQUIRED]->(c6), 
     (c7)-[:ACQUIRED]->(c8)-[:ACQUIRED]->(c9), 
     (c8)-[:ACQUIRED]->(c10) 

enter image description here

これは、私たちはいくつかの異なるシナリオをテストすることができます:

  • 会社が別の会社(ID 1を取得していません)
  • 取得の長さ= 1のパスがあります(ids 2,3)
  • 取得(IDS 4,5,6)の長さ> 1つのパスはあり
  • 分岐鎖状の取得(IDS 7,8,9,10)

があり、あなたは企業のリストを取得することができますし、そのような所有者:

MATCH ownership = shortestPath((owner:Company)-[:ACQUIRED*0..]->(acquired:Company)) 
WHERE NOT()-[:ACQUIRED]->(owner) 
RETURN acquired.id AS company, head(nodes(ownership)).id AS owner; 

╒═══════╤═════╕ 
│company│owner│ 
╞═══════╪═════╡ 
│1  │1 │ 
├───────┼─────┤ 
│2  │2 │ 
├───────┼─────┤ 
│3  │2 │ 
├───────┼─────┤ 
│4  │4 │ 
├───────┼─────┤ 
│5  │4 │ 
├───────┼─────┤ 
│6  │4 │ 
├───────┼─────┤ 
│7  │7 │ 
├───────┼─────┤ 
│8  │7 │ 
├───────┼─────┤ 
│9  │7 │ 
├───────┼─────┤ 
│10  │7 │ 
└───────┴─────┘ 
+0

感謝の気持ちと素晴らしい例!残念ながら、そのクエリは私のために働いていません。所有者の名前ではなく、会社名を返すだけです。私は "会社"が私のDBの名前を保持しているので、 "会社"と "ID"を置き換えています。しかしそれ以外に、特定のDBに合わせるためにコードに加えるべき他の変更はありますか?再度、感謝します! –

+0

データセットのサンプルを私に与えることができれば、使用する正しいプロパティを知ることができます。 –

+0

@NickBurleighあなたは間違ったリレーションシップタイプを使用している可能性がありますか?正しい関係タイプを使用するように照会を編集してください。大文字と小文字を区別します。 –

関連する問題