如何使用辅助键执行ets表查找

时间:2015-09-24 23:48:39

标签: erlang mnesia erlang-shell ets

我有一个包含以下属性的表:

SortCode   Index  Created

SortCode是主键,Index是辅助键。给定Index值,如何获取关联的SortCode值?

我尝试了ets:lookup/3,但它只需要一个主键。

2 个答案:

答案 0 :(得分:3)

ets中没有二级索引。你可以这样做:

  1. 使用ets:matchets:select
  2. 进行全面扫描
  3. 使您拥有反向索引ets表或
  4. 使用mnesia添加(辅助)索引。

答案 1 :(得分:-1)

加入Hynek -Pichi- Vychodil所说的话。

除了密钥之外,还没有使用其他属性来获取记录的解决方案。可以使用mnesia:dirty_index_read()完成。

如果您只想使用ets,那么您可以按照上述建议或以下代码进行操作。假设您的记录模式类似于:{"one",1,"27092015"} 关键是"一个"但是你必须使用1来获取。

FilterSuspCodeFun = fun ({_,I,_}) when I == 1 -> true ; (_) -> false end,
ListData = ets:tab2list(susp_code),
{SortCode,_,created}= lists:filter(FilterSuspCodeFun,ListData),