在查询中使用查找和多值字段

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

在 Access 中,可以创建一个多值字段,用于保存多个值 (最多 100) 。 还可以创建查阅字段,显示绑定到其他数据源中的值的用户友好值。 查询 Lookup 或多值字段时,有一些独特的注意事项。 有关详细信息,请参阅 创建或删除多值字段 和 创建或删除查阅字段。

本文内容

查看查询中 Lookup 字段的绑定值

默认情况下,查阅字段的显示值自动显示在查询数据表视图中。 创建查询时,可以替代此行为,以便改为显示绑定值。 在本示例中,假设你想要查看“查找”新英格兰州名称的 Headquarters 表中 Lookup 字段的绑定值。

“查阅”字段表

  1. 在 “设计”视图中打开查询。

  2. 在本示例中,添加 Headquarters 表和 NewEngland 表。
    应该联接这两张表。

    查阅字段架构

    有关详细信息,请参阅 联接表和查询。

  3. 将 a 字段和 Lookup 字段拖动到查询设计网格。 在本示例中,添加 City 和 NEState 字段。

  4. 单击“查阅”字段,然后在 “设计 ”选项卡的“ 显示/隐藏 ”组中,单击 “属性表”。 在本示例中,使用 NEState 字段。

  5. 在属性表中,选择“ 查找 ”选项卡,然后在 “显示控件 ”属性中,选择“ 文本框”。
    查询设计中的“显示控件”属性

结果 现在,在“数据表视图”中查看查询时,会看到显示值的相应绑定值。

显示绑定值的查询结果 页首

在查询中使用查阅字段的显示值

创建 Lookup 字段时,会在 Bound 值和 Display 值之间创建一个联接。 虽然不能直接在查询中使用显示值,但可以使用其他数据源中的相应值。 在本示例中,假设你要在查询中使用 Headquarters 表中查阅字段 NEState 的显示值作为条件。

  1. 在 “设计”视图中打开查询。

  2. 在本示例中,添加 Headquarters 表和 NewEngland 表。
    应该联接这两张表。 有关详细信息,请参阅 联接表和查询。

  3. 将要使用的字段拖到查询网格。 在本示例中,将 City 从 Headquarters 表拖到第一列,将 NEState 从 Headquarters 表拖到第二列,将 StateName 从 NewEngland 表拖到第三列。

  4. 清除查询网格中 StateName 的“显示”检查框。

  5. 在查询网格的 StateName 下的“条件”行中,输入 Vermont。

    显示查阅字段的绑定值的查询网格

    查询条件基于 StateName 列,该值当然与显示值 NEState 相同,但不显示在数据表视图中。

  6. 在“设计”选项卡上的“结果”组中,单击“运行”。

结果 仅显示包含佛 蒙特州 的行。

查询结果 返回页首

在查询中使用多值字段

在查询中显示多值字段时,可以显示包含一行上用逗号分隔的所有值的完整多值字段,也可以显示具有每个值单独一行的平展数据。 例如,假设您有一个 “问题” 表,其中包含每个问题的 “标题” 字段和一个用于将问题分配给人员的 AssignedTo 多值字段。

在一行中显示多值字段中的所有值

  1. 在 “设计”视图中打开查询。
  2. 在本示例中,添加 “问题” 表。
  3. 将字段拖动到查询设计网格。 在本示例中,拖动 Title 字段和 AssignedTo 多值字段。
  4. 在“设计”选项卡上的“结果”组中,单击“运行”。

结果 如你所料,一列显示 “标题” 字段,第二列显示“ AssignedTo ”多值字段:

多值字段 使用非平展结果的查询 在平展视图) (一行显示多值字段的每个值

  1. 在 “设计”视图中打开查询。
  2. 在本示例中,添加 “问题” 表。
  3. 将字段拖动到查询网格。 在本示例中,拖动 Title 字段和 AssignedTo.Value 多值字段。
    格式 Fieldname<>。Value,将 Value 属性作为字符串追加。值添加到AssignedTo 字段。
  4. 在“设计”选项卡上的“结果”组中,单击“运行”。

结果 数据将被平展,以便重复 Title 字段,并且 AssignedTo 多值字段中的每个值显示在相应的行中:

多值字段 具有平展结果的查询 返回页首

在查询中向多值字段添加条件

在查询网格的不同网格列中放置同一条件会对查询结果产生很大影响。

添加在一行中显示多值字段中所有值的条件

Access 首先创建结果集,然后添加条件。

  1. 在 “设计”视图中打开查询。

  2. 在本示例中,添加 “问题” 表。

  3. 将字段拖动到查询网格。 在本示例中,拖动 Title 字段、 AssignedTo 多值字段和 AssignedTo.Value 多值字段。

  4. 清除查询网格中 AssignedTo.Value 的“显示”检查框。

  5. 在查询网格的 AssignedTo.Value 下的 “条件 ”行中,输入“NOT ”David Hamilton“。

    具有直查找字段的查询设计网格

    查看 SQL 视图很有帮助:
    SELECT Title, AssignedTo FROM Issues WHERE NOT AssignedTo.Value = "David Hamilton";

  6. 在“设计”选项卡上的“结果”组中,单击“运行”。

结果 未分配给 David Hamilton 的三个问题以默认值显示。

多值字段的结果使用 <字段名称> 添加条件,以在平展视图) 的一行中显示多值字段中的每个值 (

Access 首先创建平展结果集,然后添加条件。

  1. 在 “设计”视图中打开查询。

  2. 在本示例中,添加 “问题” 表。

  3. 将字段拖动到查询网格。 在本示例中,拖动 Title 字段和 AssignedTo.Value 多值字段。

  4. 在查询网格的 AssignedTo.Value 下的 “条件 ”行中,输入 NOT “David Hamilton”。

    带有 . 的查询设计网格查阅字段的值格式

    查看 SQL 视图很有帮助:
    SELECT Issues.Title, AssignedTo.Value FROM Issues WHERE NOT AssignedTo.Value = "David Hamilton"

  5. 在“设计”选项卡上的“结果”组中,单击“运行”。

结果 未分配给 David Hamilton 的每个问题都以平展值显示。

多值字段的结果使用<字段名称>。值 页首

向查询中的多值字段添加多个条件

有时需要在多值字段内搜索多个值的匹配项。 例如,假设要查看“Kelly Rollin”和“Lisa Miller”同时出现在 AssignedTo 字段中的值中的问题

  1. 在 “设计”视图中打开查询。
  2. 在本示例中,添加 “问题” 表。
  3. 将字段拖动到查询网格。 在本示例中,拖动 Title 字段和 AssignedTo 多值字段。
  4. 在查询网格的 “分配对象”下的“ 条件 ”行中,输入“Kelly Rollin” AND “Lisa Miller”。
  5. 在“设计”选项卡上的“结果”组中,单击“运行”。

结果 显示分配给“Kelly Rollin”和“Lisa Miller”的这两个问题。

在多值字段中使用 AND 的查询结果

返回页首

对查询中的多值字段进行分组和计数

要对存储在多值字段中的值执行计算、分组和排序,请使用 <Fieldname>。值字段。 有关组查询的详细信息,请参阅 使用查询对数据进行计数。

计算分配给每个人的问题数

  1. 在 “设计”视图中打开查询。
  2. 在本示例中,添加 “问题” 表。
  3. 将要使用的字段拖到查询网格。 在本示例中,将 AssignedTo.Value 拖动到第一列,将 Title 拖动到第二列。
  4. 在“设计”选项卡上的“显示/隐藏”组中,单击“总计”。
    “ 总计 ”行将显示在查询网格中。 默认情况下,分组依据显示在查询中每个字段下的“总计”单元格中。
  5. 在查询网格的 “标题”下的“ 总计 ”行中,单击“ 计数”。
  6. 在“设计”选项卡上的“结果”组中,单击“运行”。

结果 分配给每个人的问题计数显示在平展视图中。

对每个人分配的问题进行计数的查询

计算分配给每个问题的人数

  1. 在 “设计”视图中打开查询。
  2. 在本示例中,添加 “问题” 表。
  3. 将要使用的字段拖到查询网格。 在本示例中,将 Title 拖动到第一列,并将 AssignedTo 拖动到第二列。
  4. 在“设计”选项卡上的“显示/隐藏”组中,单击“总计”。
    “ 总计 ”行将显示在查询网格中。 默认情况下,“分组依据”显示在查询中“标题”字段下的“总计”单元格中。 默认情况下,表达式显示在 AssignedTo 字段下的“总计”单元格中,因为不能直接对多值字段执行“分组依据”操作,只能对 Fieldname> 执行<。值字段。
  5. 在查询网格的 “分配到”下的“ 总计 ”行中,单击“ 计数”。
  6. 在“设计”选项卡上的“结果”组中,单击“运行”。

结果 每个问题分配的人员计数显示在展开视图中。

显示每个问题的人员计数的查询结果

返回页首

将追加查询用于多值字段

可以使用追加查询将单个值插入到多值字段中。 例如,假设要将“Tom Michaels”添加到“问题”表中的 AssignedTo 多值字段。

备注 这是适用于多值字段的唯一追加查询类型。

  1. 在 “设计”视图中打开查询。
  2. 添加 “问题” 表。
  3. 在 “设计 ”选项卡上,单击 “追加”。
  4. 在 “追加 ”对话框中,选择 “问题”,然后单击“ 确定”。
  5. 在设计网格的“ 追加到 ”行中,选择 AssignedTo.Value。
  6. 在设计网格的 “字段 ”行中,输入“Tom Michaels”。
  7. 若要将追加操作限制为特定问题,请向设计网格添加一个字段(如“标题”),从“追加到”行中删除“标题”,然后输入条件(如“问题 3”)。
  8. 在“设计”选项卡上的“结果”组中,单击“运行”。
    Access 可能会要求你确认是否追加所选行。 单击“ 是 ”插入行,或单击 “否 ”取消。

结果 “Tom Michaels”现已添加到第 3 期的 AssignedTo 字段中。

重要 不能使用引用包含多值字段的表的追加查询。 例如,以下查询无效:

INSERT INTO [NewIssues] ( ID, Title, AssignedTo ) SELECT Issues.ID, Issues.Title, Issues.AssignedTo FROM Issues;

返回页首

将更新查询用于多值字段

可以使用更新查询将多值字段中的单个值更改为另一个值。 在此示例中,你想要更新 AssignedTo 多值字段,将“Kelly Rollin”替换为“Lisa Miller”。

  1. 在 “设计”视图中打开查询。
  2. 添加 “问题” 表。
  3. 在 “设计 ”选项卡上,单击 “更新”。
  4. 将 AssignedTo.Value 拖到查询网格。
  5. 在 “更新到 ”行中,输入“Lisa Miller”。
  6. 在“ 条件” 行中,输入“Kelly Rollin”。
  7. 在“设计”选项卡上的“结果”组中,单击“运行”。
    Access 可能会要求你确认是否追加所选行。 单击“ 是 ”插入行,或单击 “否 ”取消。

结果 丽莎·米勒 (Lisa Miller) 取代了所有相应问题的 “分配到” 字段中的凯利·罗林 (Kelly Rollin)。

返回页首

将 Delete 查询用于多值字段

使用包含多值字段的表时,可以使用删除查询删除多值字段中包含特定值的记录,或删除表中所有记录中的多值字段中的特定值。 在以下示例中,假设要从“问题”表中删除“David Hamilton”。

重要 使用删除查询删除包含数据的多值字段时,将永久丢失该数据 - 无法撤消删除。 因此,在删除任何表字段或其他数据库组件之前,应备份你的数据库。

从所有记录的多值字段中删除特定值

  1. 在“创建”选项卡上的“查询”组中,单击“查询设计”。
  2. 添加 “问题” 表。
  3. 在 “设计”视图中打开查询。
  4. 在 “设计 ”选项卡上,单击 “删除”。
  5. 在 “条件” 行中,输入“David Hamilton”。
  6. 在“设计”选项卡上的“结果”组中,单击“运行”。
    Access 可能会要求确认是否删除记录。 单击 “是 ”删除记录,或单击 “否” 取消记录。

结果 David Hamilton 因所有相应问题被删除。

删除在多值字段中包含特定值的记录

  1. 在“创建”选项卡上的“查询”组中,单击“查询设计”。

  2. 添加 “问题” 表。

  3. 在 “设计”视图中打开查询。

  4. 在 “设计 ”选项卡上,单击 “删除 组”。

  5. 在 “设计 ”选项卡的 “结果 ”组中,单击 “视图 ”下的箭头,然后单击“ SQL 视图”。

  6. 输入以下 SQL 语句:

    DELETE FROM Issues WHERE (((Issues.AssignedTo.Value)="David Hamilton"));
    

    备注 在这种情况下,只能使用 SQL 语句,而不能使用设计网格。 如果切换到设计网格视图,Access 会在 DELETE 语句后添加一个星号 (*) ,应将其从 SQL 视图中删除。

  7. 在“设计”选项卡上的“结果”组中,单击“运行”。
    Access 可能会要求确认是否删除记录。 单击 “是 ”删除记录,或单击 “否” 取消记录。

结果 分配了 David Hamilton 的所有问题都将被删除。

返回页首