添加连接 (数据管理)

摘要

基于公共字段将图层连接到另一图层或表。 支持带有栅格属性表的要素图层、表视图和栅格图层。

连接表参数值中的记录与输入表参数值中的记录相匹配。 输入字段值与连接字段值相等时,即表示匹配。 该连接为临时连接。

插图

“添加连接”工具图示

使用情况

  • 输入表参数值可以是带有属性表的要素图层、表视图或栅格图层。 如果使用数据路径,则将使用连接创建图层。 连接始终驻留在图层中,而不是与数据一起。

  • 要进行永久连接,请使用连接字段工具或者使用已连接图层作为以下工具之一的输入:复制要素复制行导出要素导出表。 当将这些结果保存到新要素类或表时,可以使用保持完全限定字段名环境控制是否使用字段所在表的名称限定连接输出字段名称。 将从图层到输出保留字段别名,除非当输出为 shapefile 时。

  • 当您希望连接企业级地理数据库或 SQLite 数据库数据时,可以使用创建查询图层创建数据库视图创建聚合查询图层工具来优化连接性能并获得更多功能。

  • 如果输入为要素类或数据集路径,则此工具将创建并返回应用了该工具结果的新图层。

  • 当连接生成一对多连接时,可以在属性表中查看连接结果,如果该表具有重复的对象 ID,则会显示警告消息。 由于许多地理处理工具不支持具有重复对象 ID 的数据,并且处理此类数据会产生意外结果,因此建议您首先使用导出要素工具将连接图层复制到新要素类。 然后将新要素类用作其他地理处理工具的输入。

  • 下表包含使用各种输入执行连接的一些可能结果。

    第一个表显示了一对多连接。 仅保留匹配的记录不会造成任何影响,因为所有记录都具有匹配项。

    输入表连接表结果

    输入字段

    类型

    连接字段

    输入字段

    类型

    连接字段

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    1

    300

    1

    A

    1

    300

    2

    400

    2

    B

    2

    400

    添加连接示例:一对多连接(如果每个表都具有“对象 ID”字段)

    第二个表使用没有“对象 ID”字段的连接表;只能进行一对一连接。 仅当每个表都来自不同的工作空间时,一对一连接才有可能。 一对一连接不区分大小写。

    输入表连接表结果

    输入字段

    类型

    连接字段

    输入字段

    类型

    连接字段

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    300

    4

    400

    添加连接示例:一对一连接(如果这两个表都没有“对象 ID”字段)

    在最后一个表中,输入表的记录数多于连接表。 保留所有记录时,将保留所有匹配记录以及输入表中不匹配的记录。

    输入表连接表结果

    输入字段

    类型

    连接字段

    输入字段

    类型

    连接字段

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    C

    1

    300

    1

    A

    1

    300

    4

    D

    2

    400

    2

    B

    2

    400

    3

    C

    <空>

    <空>

    4

    D

    <空>

    <空>

    添加连接示例:一对多连接(如果每个表都具有“对象 ID”字段并且选中保留所有输入记录参数)

    输入表必须具有“对象 ID”字段才能执行一对多连接,并且位于同一工作空间中。

  • 如果连接表具有“对象 ID”字段,则可以将连接表中的记录与多个记录匹配;否则,将执行一对一连接。

  • 当连接表时,默认选项是保留所有记录。 如果输入表中的某条记录在连接表中没有匹配项,则对于从连接表追加到输入表中的所有字段,该记录将被赋予空值。

    输入表连接表结果

    输入字段

    类型

    连接字段

    输入字段

    类型

    连接字段

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    C

    1

    300

    1

    A

    1

    300

    4

    D

    2

    400

    2

    B

    2

    400

    3

    C

    <空>

    <空>

    4

    D

    <空>

    <空>

    如果未选中保留所有输入记录参数,且输入表中的记录在连接表中没有匹配项,则该记录将从结果输出中移除。 如果输入表是某一图层的属性表,则未连接数据的要素将不会显示在地图上。

    输入表连接表结果

    输入字段

    类型

    连接字段

    输入字段

    类型

    连接字段

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    300

    4

    400

  • 在使用一对多图层时,计算字段工具将更新遇到的第一条记录,并跳过其余的重复记录。 在表视图中手动编辑连接图层字段值时,将保留最后一次编辑内容。

  • 添加或移除连接时,将保留字段属性,例如别名、可见性和数字格式设置。

  • 连接仅在图层持续时间内有效。 要保存图层,可通过保存 ArcGIS AllSource 会话或使用将图层保存至文件工具将其保存到图层文件。

    要查看在脚本工具中创建的连接的结果,该工具必须将图层作为派生输出参数包含在内。 同样,必须将更新的输入图层或表视图参数设置为模型工具中的派生输出参数,才能查看连接结果。

  • 在生成的表中,字段将以输入的名称和句点 (.) 为前缀,默认情况下,连接表中的所有字段都将以连接表名称加上句点作为前缀。

    例如,将带有 AB 字段的 landuse 连接到带有 CD 字段的 lookup_tab,将得到带有以下字段的图层或表视图:landuse.Alanduse.Blookup_tab.Clookup_tab.D

  • 图层必须具有唯一的字段名称。 如果输入表和连接表具有相同的名称并且位于不同的工作空间中,则在不创建定义不明确的图层的情况下无法执行连接。

  • 对输入字段和连接字段进行索引可以提高性能。 如果选中索引连接字段参数,则会将属性索引同时添加至两个字段。 或者,可使用添加属性索引工具对每个连接字段建立索引。

  • 如果连接结果意外或者不完整,请检查是否已对输入字段和连接字段建立索引。 如果未对字段建立索引,请尝试添加索引。 如果已对字段建立索引,请尝试删除并重新添加索引以纠正索引中的任何问题。 或者,选中重建连接字段索引参数,移除现有索引并重新构建索引。

  • 如果在创建要素图层创建表视图工具中使用字段信息参数修改(重命名或隐藏)输入图层或表视图的字段,则字段修改将不会包含在输出连接图层或表视图中。

  • 通过添加一个新的活动查询,将连接表的定义查询应用于输入图层或表视图。 之前的查询将被保留并设置为非活动状态,以便在需要时可以从连接表中禁用查询。 可以使用移除连接工具来移除定义查询。

  • 如果连接表具有定义查询,则保留所有输入记录参数将无效。 如果使用,可以通过追加 or OBJECTID is null 来手动更新定义查询,以修复此问题。

  • 验证连接工具可用于验证两个图层或表之间的连接,以确定图层或表是否具有有效的字段名称和对象 ID 字段,该连接是否生成匹配记录,该连接是一对一还是一对多连接,以及其他连接属性。

    该工具的对话框上有一个用于验证连接的按钮,以方便用户的使用。

  • 添加连接工具中,将忽略对输入表或连接表的选择。 连接字段工具支持选择操作。 要仅与所选子集进行连接,请创建一个选择图层并将其用作添加连接工具的输入。 创建选择图层时,将复制连接图层属性。

参数

标注说明数据类型
输入表

连接表将连接到的图层或表视图。

Mosaic Layer; Raster Layer; Table View
输入字段

连接所基于的输入图层或表视图中的字段。

Field
连接表

将连接到输入图层或表视图的表或表视图。

Mosaic Layer; Raster Layer; Table View
连接字段

连接表中包含连接所基于的值的字段。

Field
保留所有输入记录
(可选)

指定是否仅将输入中与连接表内的记录相匹配的记录包括在输出中。

  • 选中 - 输入图层或表视图中的所有记录都将包含在输出中。 这也称为外部连接。 这是默认设置。
  • 未选中 - 仅将输入中与连接表中的行相匹配的记录包括在输出中。 这也成为内部连接。
Boolean
索引连接字段
(可选)

指定是否为输入字段和连接字段添加表属性索引。

  • 选中 - 将同时为两个字段建立索引。 如果表已有索引,则不会添加新索引。
  • 未选中 - 将不会添加索引。 这是默认设置。
Boolean
重建连接字段索引
(可选)

指定是否将移除输入字段和连接字段的现有索引并重建索引。

  • 选中 - 将移除现有索引并添加新索引。
  • 未选中 - 不会移除现有索引或重建索引。 这是默认设置。
Boolean

派生输出

标注说明数据类型
更新的输入图层或表视图

已更新的输入数据集。

Table View; Raster Layer; Mosaic Layer

arcpy.management.AddJoin(in_layer_or_view, in_field, join_table, join_field, {join_type}, {index_join_fields}, {rebuild_index})
名称说明数据类型
in_layer_or_view

连接表将连接到的图层或表视图。

Mosaic Layer; Raster Layer; Table View
in_field

连接所基于的输入图层或表视图中的字段。

Field
join_table

将连接到输入图层或表视图的表或表视图。

Mosaic Layer; Raster Layer; Table View
join_field

连接表中包含连接所基于的值的字段。

Field
join_type
(可选)

指定是否仅将输入中与连接表内的记录相匹配的记录包括在输出中。

  • KEEP_ALL输入图层或表视图中的所有记录都将包含在输出中。 这也称为外部连接。 这是默认设置。
  • KEEP_COMMON仅将输入中与连接表中的行相匹配的记录包括在输出中。 这也成为内部连接。
Boolean
index_join_fields
(可选)

指定是否为输入字段和连接字段添加表属性索引。

  • INDEX_JOIN_FIELDS将同时为两个字段建立索引。 如果表已有索引,则不会添加新索引。
  • NO_INDEX_JOIN_FIELDS将不会添加索引。 这是默认设置。
Boolean
rebuild_index
(可选)

指定是否将移除输入字段和连接字段的索引并重建索引。

  • REBUILD_INDEX将移除现有索引并添加新索引。
  • NO_REBUILD_INDEX不会移除现有索引或重建索引。 这是默认设置。
Boolean

派生输出

名称说明数据类型
out_layer_or_view

已更新的输入数据集。

Table View; Raster Layer; Mosaic Layer

代码示例

AddJoin 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下使用 AddJoin 函数。

import arcpy
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
veg_joined_table = arcpy.management.AddJoin("vegetation", "HOLLAND95", 
                                            "vegtable", "HOLLAND95")
arcpy.management.CopyFeatures(veg_joined_table, "vegjoin")
AddJoin 示例 2(独立脚本)

该独立脚本显示了作为工作流一部分的 AddJoin 函数,用于将表连接到要素类并提取指定要素。

# Name: AttributeSelection.py
# Purpose: Join a table to a feature class and select the desired attributes

# Import system modules
import arcpy

# Set environment settings
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
# The qualifiedFieldNames environment is used by Copy Features when persisting 
# the join field names.
arcpy.env.qualifiedFieldNames = False

# Set local variables
inFeatures = "vegtype"
joinTable = "vegtable"
joinField = "HOLLAND95"
expression = "vegtable.HABITAT = 1"
outFeature = "vegjoin"

# Join the feature layer to a table
veg_joined_table = arcpy.management.AddJoin(inFeatures, joinField, joinTable, 
                                            joinField)

# Select desired features from veg_layer
arcpy.management.SelectLayerByAttribute(veg_joined_table, "NEW_SELECTION", 
                                        expression)

# Copy the layer to a new permanent feature class
result = arcpy.management.CopyFeatures(veg_joined_table, outFeature)

# See field names and aliases
resultFields = arcpy.ListFields(result)
print([field.name for field in resultFields])
print([field.aliasName for field in resultFields])