2016-09-14 15 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 

しかし、カテゴリーアレイであること、これは私が得るものです:

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

私はむしろどのような質問を書くべきですか?

+0

2つのクラスを使用してエッジを接続する方がずっと簡単です。グラフDBを最大限に活用するために構造を変更できますか? –

+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

関連する問題