テーブルの結合 (Add Join) (データ管理)

サマリー

共通フィールドに基づいて、レイヤーを別のレイヤーまたはテーブルに結合します。 フィーチャ レイヤー、テーブル ビュー、およびラスター属性テーブルを含むラスター レイヤーを使用できます。

[結合テーブル] パラメーター値のレコードは、[入力テーブル] パラメーター値のレコードに一致します。 入力の結合フィールドと、出力の結合テーブルのフィールド値が等しい場合に一致したと見なされます。 この結合は一時的なものです。

テーブルの結合の図

使用法

  • [入力テーブル] パラメーター値は、属性テーブルを含むフィーチャ レイヤー、テーブル ビュー、またはラスター レイヤーにすることができます。 データ パスが使用されると、レイヤーが結合とともに作成されます。 結合は、データではなく常にレイヤーに格納されます。

  • 永続的な結合を行うには、[フィールドの結合 (Join Field)] ツールを使用するか、結合したレイヤーを [フィーチャのコピー (Copy Features)][行のコピー (Copy Rows)][フィーチャのエクスポート (Export Features)]、または [テーブルのエクスポート (Export Table)] のいずれかのツールへの入力として使用します。 結果を新しいフィーチャクラスまたはテーブルに保存する場合、環境設定の修飾されたフィールド名を使用すると、結合後の出力フィールドの名前を、フィールドの取得元のテーブルの名前で修飾するかどうかを制御できます。 出力がシェープファイルの場合を除き、レイヤーから出力にフィールド エイリアスが保存されます。

  • 入力がフィーチャクラスまたはデータセット パスの場合、このツールは、ツールの結果が適用された新しいレイヤーを自動的に作成して返します。

  • 結合によって 1 対多の結合が生成された場合、結合の結果は属性テーブルで確認でき、テーブルに重複する Object ID が存在する場合、警告メッセージが表示されます。 多くのジオプロセシング ツールは重複した Object ID を含むデータをサポートしておらず、そのようなデータを処理した際に予期しない結果が生じる可能性があるため、最初に [フィーチャのエクスポート (Export Features)] ツールを使用して結合したレイヤーを新しいフィーチャクラスにコピーすることをお勧めします。 その後、新しいフィーチャクラスを他のジオプロセシング ツールの入力として使用します。

  • 次のテーブルには、さまざまな入力で結合を行った場合の考えられる結果が含まれます。

    最初のテーブルは、1 対多の結合を示します。 すべてのレコードが一致するため、一致するレコードのみを保持することによる影響はありません。

    入力テーブル結合テーブル結果

    入力フィールド

    タイプ

    結合フィールド

    入力フィールド

    タイプ

    結合フィールド

    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 フィールドがあるときの 1 対多の結合

    2 番目のテーブルは、オブジェクト ID のない結合テーブルを使用しています。この場合、1 対 1 の結合のみが可能です。 また、各テーブルの取得元のワークスペースが異なる場合にのみ、1 対 1 の結合を行うことができます。

    入力テーブル結合テーブル結果

    入力フィールド

    タイプ

    結合フィールド

    入力フィールド

    タイプ

    結合フィールド

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    300

    4

    400

    テーブルの結合の例: いずれのテーブルもオブジェクト ID フィールドがないときの 1 対 1 の結合

    最後のテーブルで、入力テーブルには結合テーブルより多くのレコードがあります。すべてのレコードを保持することにより、一致するすべてのレコードに加えて、一致しない入力テーブルからのレコードが保持されます。

    入力テーブル結合テーブル結果

    入力フィールド

    タイプ

    結合フィールド

    入力フィールド

    タイプ

    結合フィールド

    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

    <NULL>

    <NULL>

    4

    D

    <NULL>

    <NULL>

    テーブルの結合の例: 各テーブルにオブジェクト ID フィールドがあり、[すべてのターゲット フィーチャを保持] パラメーターがオンのときの 1 対多の結合

    入力テーブルに、1 対多の結合を実行するオブジェクト ID フィールドがあり、同じワークスペースに存在する必要があります。

  • 結合テーブルのレコードは、結合テーブルがオブジェクト ID フィールドを含む場合は複数のレコードに一致することが可能です。そうでない場合は、1 対 1 の結合が実行されます。

  • テーブルを結合するときに、すべてのレコードを保持するのがデフォルトのオプションです。 ターゲット テーブルのレコードと一致するレコードが結合テーブルに存在しない場合、そのレコードの、結合テーブルからターゲット テーブルに追加されているすべてのフィールドに、NULL 値が与えられます。

    入力テーブル結合テーブル結果

    入力フィールド

    タイプ

    結合フィールド

    入力フィールド

    タイプ

    結合フィールド

    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

    <NULL>

    <NULL>

    4

    D

    <NULL>

    <NULL>

    [すべてのターゲット フィーチャを保持] パラメーターを使用すると、ターゲット テーブルのレコードと一致するレコードが結合テーブルに存在しない場合、結合後のテーブルからそのレコードが削除されます。 ターゲット テーブルがレイヤーの属性テーブルである場合、それらに結合されているデータを持たないフィーチャはマップに表示されません。

    入力テーブル結合テーブル結果

    入力フィールド

    タイプ

    結合フィールド

    入力フィールド

    タイプ

    結合フィールド

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    300

    4

    400

  • エイリアス、表示設定、数値形式などのフィールド プロパティは、結合が追加または削除された場合も維持されます。

  • 入力テーブルは、一度に 1 つの結合が可能です。

  • 結合はレイヤーの継続期間のみ有効です。 レイヤーは、AllSource セッションを保存するか、[レイヤーをファイルへ保存 (Save Layer To File)] ツールを使用してレイヤー ファイルに保存することで、保持できます。

    スクリプト ツールで作成された結合の結果を確認するには、ツールがレイヤーを派生した出力パラメーターとして含む必要があります。 同様に、結合された結果を確認するには、モデル ツールで、[更新された入力レイヤーまたはテーブル ビュー] パラメーターを派生した出力パラメーターとして設定する必要があります。

  • デフォルトとして、ツール実行後のテーブルでは、フィールドの前に入力の名前とピリオド (.) が追加され、結合テーブルのすべてのフィールドの前に結合テーブルの名前とピリオドが追加されます。

    たとえば、AB というフィールドがある landuse を、CD というフィールドがある lookup_tab に結合すると、ツール実行後のレイヤーまたはテーブル ビューのフィールドは landuse.Alanduse.Blookup_tab.Clookup_tab.D になります。

  • レイヤーには一意の名前が必要です。 入力テーブルと結合テーブルの名前が同じで異なるワークスペースに存在する場合、結合を実行すると定義が不適切なレイヤーが作成されます。

  • 結合のキーとなる、入力テーブルおよび結合テーブル内の各フィールドにインデックスを付けると、パフォーマンスを向上させることができます。 [結合フィールドのインデックスを作成] パラメーターをオンにすると、結合する両方のフィールドに属性インデックスが追加されます。 または、結合する各フィールドには、[属性インデックスの追加 (Add Attribute Index)] ツールを使用してインデックスを付けることができます。

  • 結合結果が想定外または未完了の場合は、[結合テーブル フィールド][入力結合フィールド] のパラメーター値にインデックスが付けられているかどうかを確認します。 付けられていない場合は、インデックスを削除して再作成してから、ツールを再実行します。

  • 入力のレイヤーまたはテーブル ビューのフィールドが [フィーチャ レイヤーの作成 (Make Feature Layer)] ツールまたは [テーブル ビューの作成 (Make Table View)] ツールの [フィールド情報] パラメーターを使用して変更 (名前の変更または非表示設定) された場合でも、このフィールド変更は、結合後の出力のレイヤーまたはテーブル ビューには含まれません。

  • 結合テーブルの定義クエリは、入力レイヤーまたはテーブル ビューに適用されます。 定義クエリを削除するには、[テーブル結合の解除 (Remove Join)] ツールを使用するか、定義クエリをレイヤーから手動で削除します。

  • [結合の検証 (Validate Join)] ツールを使用すると、レイヤーまたはテーブルに有効なフィールド名および Object ID フィールドがあるかどうか、結合によって一致するレコードが生成されるか、結合が 1 対 1 であるか 1 対多であるかなどの結合のプロパティを判定するため、2 つのレイヤーまたはテーブル間の結合について検証を行うことができます。

    結合の検証を行うボタンは、簡単に使用できるよう、ツールのダイアログ ボックスにあります。

  • レイヤーでの選択は、[テーブルの結合 (Add Join)] ツールでは使用されませんが、[フィールドの結合 (Join Field)] ツールでは使用されます。

パラメーター

ラベル説明データ タイプ
入力テーブル

結合先のテーブルに結合するレイヤーまたはテーブル ビュー

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])