2017-10-16 107 views
0

我們是在一個Neo4j的POC。用例是一個儀表板,我們只爲他們有資格並且尚未採取行動的賣家帶回機會。目前有3個標準,我們希望增加兩個。對應的SQL是3頁,所以我們當我們添加下一個標準,新2點節點的路徑尋找一個更好的方式,將在SQL熊。當我運行下面的查詢時,我得到的行數不同於SQL。返回的購買必須在所有3條路徑的末尾,而不是在第4條。我希望你能指出我出錯的地方。如果這是一個很好的查詢,那麼我有一個數據問題。查找Neo4j的是,在所有路徑的末端節點,而不是在另一個

下面是該查詢:

//oportunities dashboard 
MATCH (s:SellerRep)-[:SELLS]->(subCat:ProductSubCategory)<-[:IS_FOR_SUBCAT]-(b:Buy) 
MATCH (s:SellerRep)-[:SELLS_FOR]->(o:SellerOrg)-[:HAS_SELLER_TYPE]->(st:SellerType)<-[:IS_FOR_ST]-(b:Buy) 
MATCH (s:SellerRep)-[:SELLS_FOR]->(o:SellerOrg)-[:IS_IN_SC]->(sc:SellerCommunity)<-[:IS_FOR_SC]-(b:Buy) 
WHERE NOT (s:SellerRep)-[:PLACED_BID]->(:Bid)-[:IS_FOR_BUY]->(b:Buy) 
AND s.sellerRepId = 217722 and b.currBuyStatus = 'Open' 
RETURN b.buyNumber, b.buyDesc, st.sellerType, sc.communtiyName, subCat.subCategoryName+' - '+subCat.desc as sub_cat 

如果有幫助,這裏是數據模型: POC Data model

感謝您的幫助。

回答

1

WHERE子句僅過濾緊接在前MATCH子句。

既然你放置你的WHERE條款第三MATCH條款後,第2項MATCH條款不綁定到特定SellerRepBuy節點,並因此帶來更多的ProductSubCategorySellerType節點比您預期。

下面的查詢可能接近是您的本意:

MATCH (s:SellerRep)-[:SELLS]->(subCat:ProductSubCategory)<-[:IS_FOR_SUBCAT]-(b:Buy) 
WHERE s.sellerRepId = 217722 AND b.currBuyStatus = 'Open' AND NOT (s:SellerRep)-[:PLACED_BID]->(:Bid)-[:IS_FOR_BUY]->(b:Buy) 
MATCH (s)-[:SELLS_FOR]->(o:SellerOrg)-[:HAS_SELLER_TYPE]->(st:SellerType)<-[:IS_FOR_ST]-(b) 
MATCH (o)-[:IS_IN_SC]->(sc:SellerCommunity)<-[:IS_FOR_SC]-(b) 
RETURN b.buyNumber, b.buyDesc, st.sellerType, sc.communtiyName, subCat.subCategoryName+' - '+subCat.desc as sub_cat 

注:您的第二和第三MATCH條款都開始(s:SellerRep)-[:SELLS_FOR]->(o:SellerOrg)。我通過讓我第三MATCH條款只是開始(o)簡化了相同的邏輯。但願,你居然旨在迫使這兩個條款,指的是同一SellerOrg節點。

相關問題