クエリ テーブルの作成(Make Query Table) (データの管理)

サマリ

このツールは、SQL クエリをデータベースに適用し、結果をレイヤまたはテーブル ビューのどちらかに表示します。クエリを使用して複数のテーブルを結合したり、データベース内の元のデータから列または行の一部を取得したりできます。

このツールは、ArcSDE ジオデータベース、ファイル ジオデータベース、パーソナル ジオデータベース、または OLE DB 接続からのデータに対して使用します。

使用法

構文

MakeQueryTable_management (in_table, out_table, in_key_field_option, {in_key_field}, {in_field}, {where_clause})
パラメータ説明データ タイプ
in_table
[in_table,...]

クエリに使用するテーブル(1 つまたは複数)の名前。複数のテーブルがリストされている場合は、[式] パラメータを使用して、テーブル同士の結合方法を定義することができます。

入力テーブルとして使用できるのは、ArcSDE ジオデータベース、ファイル ジオデータベース、パーソナル ジオデータベース、または OLE DB 接続からのものです。

Table View; Raster Layer
out_table

ツールで作成するレイヤまたはテーブル ビューの名前。

Table View;Raster Layer
in_key_field_option

クエリ用の ObjectID フィールドを生成する場合、その生成方法を指定します。デフォルトは USE_KEY_FIELDS です。

  • USE_KEY_FIELDSキー フィールド リストで選択したフィールドを、動的 ObjectID 列の定義に使用する必要のあることを示します。キー フィールド リストでフィールドを選択しないと、ADD VIRTUAL_KEY_FIELD オプションが自動的に適用されます。
  • ADD_VIRTUAL_KEY_FIELDキー フィールドを選択しない場合でも、動的 ObjectID 列を生成するように指定するオプションです。この生成を行うには、ローカルのシステム管理ワークスペースにデータをコピーし、そのコピーに値が一意のフィールドを追加します。これにより、そのコピーにレイヤまたはテーブル ビューからアクセスできるようになり、追加されたフィールドをキー フィールドとして使用できます。
  • NO_KEY_FIELD動的 ObjectID 列を生成しないように指定するオプションです。このオプションがオンの場合、テーブル ビューの選択がサポートされなくなります。このオプションがオンになっている場合でも、フィールド リストに ObjectID タイプの列がすでに存在していれば、その列が ObjectID として使用されます。
String
in_key_field
[in_key_field,...]
(オプション)

クエリ内の行を一意に識別するために使用できる、フィールドまたはフィールドの組み合わせを指定します。このパラメータが使用可能になるのは、USE_KEY_FIELDS が設定されているときだけです。

[フィールドの追加] ボタンは ModelBuilder だけで使用され、ダイアログ ボックスを完了してモデルの作成を続行できるように、必要なフィールドが追加されます。

Field
in_field
[[Field, {Alias}],...,...]
(オプション)

レイヤまたはテーブルに格納されるフィールド。フィールド用のエイリアスが設定されている場合、この名前が表示されます。フィールドを指定しないと、すべてのテーブル内のすべてのフィールドが格納の対象になります。

Value Table
where_clause
(オプション)

レコードのサブセットを選択するために使用する SQL 式。この式の構文はデータ ソースによって多少異なります。たとえば、クエリ対象がファイル ジオデータベース、ArcSDE ジオデータベース、シェープファイル、カバレッジ、dBASE、または INFO テーブルの場合は、次のようにフィールド名を二重引用符で囲みます。

"MY_FIELD"

クエリ対象がパーソナル ジオデータベースの場合は、以下のようにフィールドを角括弧で囲みます。

[MY_FIELD]

Python では、文字列を単一引用符または二重引用符で囲みます。SQL 式の WHERE 句などで通常行われるように、引用符を含む文字列を作成する場合は、引用符を円記号(\)でエスケープするか、文字列を三重引用符で囲みます。たとえば、次のような WHERE 句を記述する場合、

"CITY_NAME" = 'Chicago'

次のように文字列全体を二重引用符で囲み、内部の二重引用符をエスケープします。

" \"CITY_NAME\" = 'Chicago' "

または、次のように文字列全体を単一引用符で囲み、内部の単一引用符をエスケープします。

' "CITY_NAME" = \'Chicago\' '

あるいは、次のようにエスケープしないで文字列全体を三重引用符で囲みます。

""" "CITY_NAME" = 'Chicago' """

SQL 構文の詳細とデータ ソースによる違いについては、ヘルプ トピックの「ArcGIS で使用されるクエリ式への SQL リファレンス」をご参照ください。

SQL Expression

コードのサンプル

MakeQueryTable(クエリ テーブルの作成)の例(Python ウィンドウ)

次の Python ウィンドウ スクリプトは、MakeQueryTable(クエリ テーブルの作成)関数をイミディエイト モードで使用する方法を示しています。

import arcpy
from arcpy import env
env.workspace = "C:/data/data.gdb"
arcpy.MakeQueryTable_management (["Counties","codemog"], "queryout","ADD_VIRTUAL_KEY_FIELD", "",
                   [["Counties.OBJECTID", 'ObjectID'],["Counties.NAME", 'Name'],
                    ["codemog.Males", 'Males'], ["codemog.Females", 'Females']],
                   "Counties.FIPS = codemog.Fips and Counties.STATE_NAME = 'California'")
MakeQueryTable(クエリ テーブルの作成)の例 2(スタンドアロン スクリプト)

次のスクリプトは、Python スクリプト環境で MakeQueryTable(クエリ テーブルの作成)ツールを使用する方法を、例を挙げて示したものです。

# MakeQueryTableOLEDB.py
# Description: Create a query table from two OLE DB tables using a limited set of
#               fields and establishing an equal join.
# Author: ESRI
 
# Import system modules
import arcpy
 
try:
    # Local variables...
    tableList = ["Database Connections/balrog.odc/vtest.COUNTIES",\
                 "Database Connections/balrog.odc/vtest.CODEMOG"]
    
    fieldList = [["vtest.COUNTIES.OBJECTID", 'ObjectID'],["vtest.COUNTIES.NAME", 'Name']\
                 ["vtest.CODEMOG.Males", 'Males'],["vtest.CODEMOG.Females", 'Females']]
    whereClause = "vtest.COUNTIES.FIPS = vtest.CODEMOG.Fips" +\
                  "and vtest.COUNTIES.STATE_NAME = 'California'"
    keyField = "vtest.COUNTIES.OBJECTID"
    lyrName = "CountyCombined"
    # Make Query Table...
    arcpy.MakeQueryTable_management(tableList, lyrName,"USE_KEY_FIELDS", keyField, fieldList, whereClause)
 
    # Print the total rows
    print arcpy.GetCount_management(lyrName)
 
    # Print the fields
    Fields = arcpy.ListFields(lyrName)
    for field in Fields:
        print Field.name
        
 
    # Save as a dBASE file
    arcpy.CopyRows_management(lyrName, "C:/temp/calinfo.dbf")
 
except Exception, e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print "Line %i" % tb.tb_lineno
    print e.message

環境

関連項目

ライセンス情報

ArcView: はい
ArcEditor: はい
ArcInfo: はい

7/10/2012