1

このクエリで同じノードを別々の列に2回返さないようにしています

START n=node:nodes(customer = 'c2')
MATCH n-[:OWNS]->owned-[:CROSS_SELL|UP_SELL]->sell
RETURN distinct n.customer,owned.product,sell.product

顧客C2は製品P1およびP2を所有しています。製品P2とP3は、製品P1からクロスセルできます。製品P3は、製品P2からアップセルすることもできます。

クエリは正しく返されます

C2 P1 P3
C2 P2 P3
C2 P1 P2

顧客はすでにP2を所有しているので、結果の最後のレコードは必要ありません。

どうすればこれを達成できますか?

ありがとう

4

2 に答える 2

4

C2 と P2 の間の関係をフィルタリングする条件を追加するだけです

START n=node:nodes(customer = 'c2')
MATCH n-[:OWNS]->owned-[:CROSS_SELL|UP_SELL]->sell
WHERE not(n-[:OWNS]-sell)
RETURN distinct n.customer,owned.product,sell.product
于 2013-02-14T09:10:35.807 に答える
0

これが機能することを確認するためにテストしていませんが、論理的に正しいようです:

START n=node:nodes(customer = 'c2')
MATCH n-[:OWNS]->owned-[:CROSS_SELL|UP_SELL]->sell,
      alreadyOwns = n-[:OWNS]->sell
WHERE COUNT(alreadyOwns) = 0
RETURN distinct n.customer,owned.product,sell.product

基本的には、開始ノードからクロス/アップセルされたアイテムへの直接一致を見つけようとし、パスが見つかった場合はそれを含めないという考え方です。

于 2013-02-13T23:45:54.557 に答える