2016-09-14 29 views
1

我使用OrientDB。 我有一個表是這樣的:通過存儲在數組中的值的SQL組

NAME | CATEGORIES 
------------------- 
    N1 | [A,B] 
    N2 | [C] 
    N3 | [C,A] 
    N4 | [A,B] 

而且我想建立一個返回的類別列表的查詢,併爲每個類別的相關名稱的列表,像這樣:

CATEGORY | NAMES 
----------------------- 
    A  | [N1,N3,N4] 
    B  | [N1,N4] 
    C  | [N2,N3] 

SELECT 
    Categories as Category, 
    set(Name) as Names 
FROM Table 
GROUP BY Categories 

但是,作爲分類排列,這就是我得到::

如果「類別」是不是一個數組,我可以實現它210
CATEGORY | NAMES 
-------------------- 
    [A,B] | [N1,N4] 
    [C] | [N2] 
    [C,A] | [N3] 

我應該寫些什麼查詢?

+0

如果您使用兩個類並將它們與邊連接起來,那將會容易得多。你可以改變你的結構,從圖形數據庫中獲得最大收益嗎? –

+0

CATEGORIES使用什麼樣的數據類型?這是一個列表嗎? –

+0

類別是嵌入式類型。我可以將類別移動到新類中並創建邊。它確實有道理,這是真的。到現在爲止,我從來都不需要做任何複雜的事情。 – BkdD

回答

2

我轉載的結構與此命令

create class test extends v 
create property test.name string 
create property test.categories embeddelist string 

insert into test(name,categories) values ("N1",["A","B"]),("N2",["C"]),("N3",["C","A"]),("N4",["A","B"]) 

enter image description here

,我用這個查詢

select categories,$a.name as name from (select distinct(categories) as categories from (select categories from test order by categories unwind categories)) 
let $a = (select name from test where categories contains $parent.$current.categories) 

enter image description here

希望它能幫助。

+0

謝謝亞歷山德羅!看起來就是這樣的解決方案。我不知道如何構建這種類型的查詢。現在我會使用它,但我認爲我會很快遵循@Oleksandr建議,並將類別移動到單獨的頂點上 – BkdD