添加连接 (数据管理)

摘要

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

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

插图

“添加连接”工具图示

使用情况

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

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

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

  • 当连接生成一对多连接时,可以在属性表中查看连接结果,如果该表具有重复的对象 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

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

  • 输入表允许一次进行一个连接。

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

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

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

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

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

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

  • 如果连接结果意外或者不完整,请检查是否已对连接表字段输入连接字段参数值建立索引。 如果未建立索引,请尝试删除并重新创建索引,然后重新运行该工具。

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

  • 连接表的定义查询将应用于输入图层或表视图。 可以使用移除连接工具来移除定义查询,也可从图层中手动移除定义查询。

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

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

  • 在图层中进行的任何选择不会用于添加连接工具,但会用于添加字段工具。

参数

标注说明数据类型
输入表

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

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

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

Field
连接表

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

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

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

Field
保留所有目标要素
(可选)

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

  • 选中 - 输入图层或表视图中的所有记录都将包含在输出中。 这也称为外部连接。 这是默认设置。
  • 未选中 - 仅将输入中与连接表中的行相匹配的记录包括在输出中。 这也成为内部连接。
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})
名称说明数据类型
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

派生输出

名称说明数据类型
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 featureclass 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])