从数据库表中读取集

时间:2014-10-11 20:18:09

标签: database ampl

我有两套AB,套B取决于套件A;

set A;
set B{A};

在我的数据库中,我有两个表 - A_Table主键a_id和表B_Table,复合键b_ida_id(外键)。我尝试使用此脚本从B_Table表中读取数据以设置B

table B_Table IN "ODBC" (ConnectionStr) "B_Table":
   [b ~ b_id, a ~ a_id], B[a] ~ b;

但是这个脚本不起作用。它写了

syntax error
context:  [b ~ b_id, a ~ a_id],  >>> B[ <<< a] ~ b;

如何从具有2维键的表中读取数据?

1 个答案:

答案 0 :(得分:1)

我认为您不能使用单个表声明将数据直接读入索引集,但您可以使用辅助二维集:

set AB dimen 2;
table B_Table IN "ODBC" (ConnectionStr) "B_Table":
   AB <- [a_id, b_id];
read table B_Table;
let{a in A} B[a] := setof{(a, b) in AB} b;

另一种选择是将表声明编入索引A并使用SQL语句为a in A选择数据:

table B_Table{a in A} IN "ODBC" (ConnectionStr)
  ("SQL=SELECT b_id FROM B_Table WHERE a_id = " & a & ";"):
   B[a] <- [b_id];

或类似的东西。