Я не уверен, что это именно то, что вы имели в виду, но вы можете использовать опцию QLC {unique, true} (см. Документация QLC для получения дополнительной информации).
Я создал таблицу мнезий, называемую test, с семантикой мешков. Каждая строка состоит из имени таблицы, ключа и значения, поэтому мои строки выглядели так:
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, и в моем примере я выбираю разные ключи.
-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})),
Опять же, код просто для иллюстрации подхода