假设我有两个表,A 和 B。A 有一个 ID 字段,B 有一个 ID、Value 和 Title 字段。这两个 ID 字段是相关的,因此 A 和 B 之间是一对多的关系。
我想要做的是在 A 中添加一个计算字段,以从相关 B 记录中检索特定值的标题。这可能吗?
假设我有两个表,A 和 B。A 有一个 ID 字段,B 有一个 ID、Value 和 Title 字段。这两个 ID 字段是相关的,因此 A 和 B 之间是一对多的关系。
我想要做的是在 A 中添加一个计算字段,以从相关 B 记录中检索特定值的标题。这可能吗?
有几种方法可以做到这一点,具体取决于您要实现的目标:
A::index ---< B::indexOfA
关系排序顺序
如果您在 A 中创建一个新的计算字段,计算 = B::Title 将使用第一条记录(按排序顺序)。
示例:B 有一个字段 B::recordDate 并且无论输入记录的顺序如何,您总是想要最新的 recordDate。您将修改 A::index ---< B::indexOfA 关系以按 recordDate 降序排序. 您的 A::titleFromB 计算字段将是:
B::Title
获取NthRecord
http://www.filemaker.com/help/html/func_ref3.33.10.html
如果您想要从关系到 B 的特定记录号,您可以使用 GetNthRecord 函数。
示例:您总是希望显示与 B 的关系的第二条记录。您的 A::titleFromB 计算字段将是:
GetNthRecord(B::Title ; 2)
执行SQL
在 FileMaker 12 中,您可以使用 ExecuteSQL 计算。
示例:假设您知道要显示其标题的记录的 B::index。您的 A::titleFromB 计算字段将是:
ExecuteSQL("SELECT Title from B WHERE index = ?"; ¶ ; "," ; <field, variable or string with index of B> )
您想要构建关系的方式是让每个 A 和 B 都有自己唯一的 ID 字段。然后在 B 中,有一个 id_a 字段(或类似的字段),您可以在其中建立您的关系。
从那里我回应 pft221 所说的关于 ExecuteSQL 的内容。这对我来说是一个很棒的功能。它会是这样的:
ExecuteSQL ( "SELECT Title FROM B WHERE id_a =? and title = ?"; ""; ""; <id_a value>; <title value> )
您也可以进行内部连接,但这似乎比它的价值更麻烦。