2016-04-08 82 views
0

我是OrientDb的全新品牌,感覺有點困惑。用於將行與重複項相結合的SQL查詢


我有一些數據,看起來像這樣:

md5hash  sessionId path 
------------------------------------ 
value0  zzz  roosters 
value1  aaa  cows 
value1  bbb  ducks 
value1  bbb  pigs 
value1  ccc  chickens 
value1  aaa  horses 
value2  ggg  sheep 



我欲與君value1md5hash,以顯示爲父md5hash的孩子任何重複路徑的一切,所以我嘗試查詢,如:

SELECT md5hash, sessionId, path, FROM file WHERE md5hash="value1"

這裏」正是我希望它看起來像:

md5hash  sessionId path 
------------------------------------ 
value1  aaa  cows 
         horses 
value1  bbb  ducks 
         pigs 
value1  ccc  chickens 



甚至更​​好,看起來像這樣:

md5hash  sessionId path 
------------------------------------ 
value1  aaa  cows, horses 
value1  bbb  ducks, pigs 
value1  ccc  chickens 



但是,任何時候我添加了一個GROUP BY條款,它消除了數據。如果我通過sessionId進行分組,則我分開horsespigs

我也與DISTINCT monkied無濟於事。我覺得我在這裏錯過了一些非常基本的東西。

這是它最終看起來像我的查詢:

md5hash  sessionId path 
------------------------------- 
value1  aaa  cows 
value1  aaa  horses 
value1  bbb  ducks 
value1  bbb  pigs 
value1  ccc  chickens 


有人能指出我在正確的方向?

+1

'GROUP BY'和'GROUP_CONCAT' aggreagtion功能等同 – lad2025

+0

@ lad2025我似乎無法找到一個OrientDb的'GROUP_CONCAT'。它看起來會做的確切正確的事情,雖然... – kmort

回答

1

試試這個:

select md5hash, sessionId, $a.path from (select from file where md5hash="value1") 
let $a=(select from file where md5hash="value1" and sessionId=$parent.current.sessionId) 
group by sessionId 

這是輸出:

enter image description here

希望它可以幫助

問候

+0

哇。這完全有效。你可以添加更多的細節來解釋多個'SELECT'查詢是如何工作的(「LET」行是我不理解的)?我不明白它是如何以逗號分隔的路徑列表結束的。謝謝! – kmort

+1

我試圖解釋它: 1)從文件中選擇md5hash =「value1」,只選擇屬性爲「md5hash」的記錄設置爲「value1」。 2)用這個讓$ a =(從md5hash =「value1」和sessionId = $ parent.current.sessionId的文件中選擇):你選擇md5hash =「value1」和sessionId等於父記錄的記錄你在第1步中所做的)。 3)gruop by sessionId。 4)select md5hash,sessionId,$ a.path 它選擇字段md5hash,sessionId和具有md5hash,sessionId值的路徑列表。 希望它有幫助。 –

+0

@AlessandroRota非常感謝。我不明白它是如何遍歷所有潛在的點擊,但它顯然是。準確地說,對於在步驟1中找到的每個結果,它會執行步驟2的查詢?另外,爲什麼'再次從文件中選擇',而不是在步驟2中從$ parent中選擇?謝謝。 :-) – kmort