2017-09-03 73 views
-1

在零售商報告視角中,您希望報告文章的執行情況以及您有多少庫存。 (非常簡化)。遍歷neo4j:結果被過濾

鑑於(子)結構:

(Product)-[HasStock]->(Stock) 
(Product)-[InSale]->(Sale) 

試想一下,我們有2種產品:

P1 = {Id= 1, Color=Black, Size=L} 
P2 = {Id= 2 ,Color=Black, Size=M} 

每個人都有的(股票)股票入門{數量= 2}(又名4。單位是股票) 在銷售,我們有:

S1 = {Id= 1, Product= 1, Quantity=1} 

如果我查詢數據爲 P.Product,P.Color,P.Size,Sum(Stock.Quantity) as stockcount, Sum(Sale.Quantity) as sold 我總是隻得到一個結果返回P1產品和2(而不是2個對象,總和(股票)= 4)的庫存....我需要的是來自Relational的「外部連接」機制dbms .... 我該如何做到這一點?

(重新建立關係是可以的,但是產品並不是每天都有銷售,因此向具有空關係的銷售添加額外的節點將不是一種選擇)。 (在1億個節點上工作)。

同樣,我不想做一個笛卡爾乘積,因爲它會炸燬性能:(

+0

你能分享你的密碼查詢嗎? ? –

+0

查詢如下:'match(p:Product) - (stock:Stock)with sum(stock.Quantity)as stockcount,p as p match(p) - (sale:Sale)return p.Color,p .Size,stockcount' Schema就像這樣:CREATE(:Product {Id:1,Color:「Black」,Size:「L」}),(:Product {Id:2,Color:「Black」,Size :「S」});創建(:Stock {Id:1,Product:1,Quantity:2}),(:Stock {Id:2,Product:2,Quantity:2});創建(:Sale {Id:1,Product:1,Quantity:1}); MATCH(p:Product),(s:Stock) 其中p.Id = s.Product CREATE(p) - [:onStock] - >(s); MATCH(P:產品),(S:出售) 其中p.Id = s.Product CREATE(P) - [:inSale] - >(S); ' –

回答

2
  1. 我很抱歉,但你已經張貼在評論的查詢很可能不你的完整查詢,你不會從銷售中返回任何東西(在你的問題中)
  2. 你的問題是你沒有得到沒有銷售的產品的結果。不工作,因此沒有結果...你可以通過可選的匹配來解決這個問題。

所以這將是:

OPTIONAL MATCH(p)--(sale:Sale) 

的任何字段,那麼你從銷售退回時,有沒有銷售將有一個空值。

希望這會有所幫助。

Regards, Tom

+0

謝謝。可選的技巧! :d –