以下の関係があります
Bob-[:TWINS]-Alice
私はすべての双子を返す必要があります。以下は使用されている暗号ですが、重複を返します
MATCH a-[:TWINS]-b
RETURN a.name, b.name
重複を返さない方法は? これは関係の方向を含めることで簡単に修正できることはわかっていますが、ここでは方向は関係ありません。重複を避ける方法を考えています。
以下の関係があります
Bob-[:TWINS]-Alice
私はすべての双子を返す必要があります。以下は使用されている暗号ですが、重複を返します
MATCH a-[:TWINS]-b
RETURN a.name, b.name
重複を返さない方法は? これは関係の方向を含めることで簡単に修正できることはわかっていますが、ここでは方向は関係ありません。重複を避ける方法を考えています。
これを試してください。最初に名前のペアを注文してから、「DISTINCT」を使用して重複を削除します。
MATCH a-[:TWINS]-b
RETURN DISTINCT CASE WHEN a.name < b.name THEN a.name + ',' + b.name ELSE b.name + ',' + a.name END AS result
これを行う1つの方法が見つかりましたが、最新バージョンでのみ機能します。以前のバージョンで動作するか、これよりも単純な他のアイデアを探しています。
DISTINCT
アイデアは、関係を使用して重複を排除し、関数startnode
とendnode
関数を使用して、識別された各関係のノードを取得することです
MATCH p=a-[r:TWINS]-b
WITH DISTINCT r AS rel
WITH startnode(rel) AS n1, endnode(rel) AS n2
RETURN n1.name, n2.name
リレーションシップには方向性があり、方向を無視するクエリ フォームを使用しています。双子の間に単一の関係があるようにデータを構造化したように見えるので、クエリを単一の方向に制限することで、双子の間の単一の関係を返すことができます:>
クエリ内の追加の文字に注意してください。関係は試合のためにその方向にあります。
MATCH a-[:TWINS]->b
RETURN a.name, b.name