2016-04-08 42 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