2012-01-03 42 views

回答

4

我不確定這是您的想法,但您可以使用QLC的{unique,true}選項(請參閱QLC documentation瞭解更多信息)。

我用bag語義創建了一個mnesia表,名爲test,用bag語義。每行由表名稱,關鍵字和值的,所以我的行看起來像:

1. test, 1, 1 
2. test, 2, 1 
3. test, 2, 2 
4. test, 3, 1 
5. test, 3, 2 
6. test, 3, 3 
... etc. 

那麼這個簡單的模塊說明我的做法。請注意,您必須包含qlc庫,在我的示例中,我選擇了不同的Keys。

-module(test). 
-export([select_distinct/0]). 

-include_lib("stdlib/include/qlc.hrl"). 

select_distinct()-> 
    QH = qlc:q([K || {_TName, K, _V} <- mnesia:table(test)], {unique, true}), 
    F = fun() -> qlc:eval(QH) end, 
    {atomic, Result} = mnesia:transaction(F), 
    Result. 

編譯和運行

> c("/home/jim/test", [{outdir, "/home/jim/"}]). 
> test:select_distinct(). 
> [4,1,2,3,5] 

,如果你想進行排序,然後輸出使用QH以下版本= ...線以上

QH = qlc:sort(qlc:q([K || {_TName, K, _V} <- mnesia:table(test)], {unique, true})), 

如果您想選擇不同的值,以下將起作用:

QH = qlc:sort(qlc:q([V || {_TName, _K, V} <- mnesia:table(test)], {unique, true})), 

同樣,代碼只是爲了說明一種方法

1

對於鍵,你可以用得到的唯一鍵的列表:

mnesia:all_keys(Table). 

從我的測試中,換袋它產生的唯一鍵的列表。