Abfragetabelle erstellen (Data Management)

Zusammenfassung

Mit diesem Werkzeug wird eine SQL-Abfrage auf eine Datenbank angewendet, und die Ergebnisse werden in einem Layer oder einer Tabellensicht dargestellt. Die Abfrage kann verwendet werden, um mehrere Tabellen zu verbinden oder eine Teilmenge der Spalten oder Zeilen aus den ursprünglichen Daten in der Datenbank zurückzugeben.

Das Werkzeug funktioniert mit Daten aus einer ArcSDE-Geodatabase, einer File-Geodatabase, einer Personal-Geodatabase oder einer OLE-DB-Verbindung.

Verwendung

Syntax

MakeQueryTable_management (in_table, out_table, in_key_field_option, {in_key_field}, {in_field}, {where_clause})
ParameterErläuterungDatentyp
in_table
[in_table,...]

Der Name der in der Abfrage zu verwendenden Tabelle. Bei mehreren Tabellen können Sie mit dem Parameter "Ausdruck" definieren, wie die Tabellen verbunden werden sollen.

Die Eingabetabelle kann aus einer ArcSDE-Geodatabase, einer File-Geodatabase, einer Personal-Geodatabase oder einer OLE-DB-Verbindung stammen.

Table View; Raster Layer
out_table

Der Name des/der vom Werkzeug erstellten Layers/Tabellensicht.

Table View;Raster Layer
in_key_field_option

Gibt an, ob und wie ein ObjectID-Feld für die Abfrage erstellt wird. Die Standardeinstellung lautet "USE_KEY_FIELDS".

  • USE_KEY_FIELDSDies gibt an, dass die aus der Liste mit den Schlüsselfeldern ausgewählten Felder zur Bestimmung der dynamischen ObjectID-Spalte dienen. Wenn aus der Liste mit den Schlüsselfeldern keine Felder ausgewählt wurden, wird automatisch die Option "ADD VIRTUAL_KEY_FIELD" angewendet.
  • ADD_VIRTUAL_KEY_FIELDDies gibt an, dass keine Schlüsselfelder ausgewählt wurden, jedoch eine dynamische ObjectID-Spalte generiert werden soll. Hierzu werden die Daten in einen lokalen, vom System verwalteten Workspace kopiert. Dieser Kopie wird dann ein Feld mit eindeutigen Werten hinzugefügt. Der Layer bzw. die Tabellensicht greifen dann auf die Kopie zu und verwenden das hinzugefügte Feld als Schlüsselfeld.
  • NO_KEY_FIELDDies gibt an, dass keine dynamische ObjectID-Spalte erstellt werden soll. Bei Verwendung dieser Option wird die Auswahl für die Tabellensicht nicht unterstützt. Wenn bereits eine Spalte des Typs "ObjectID" in der Feldliste vorhanden ist, wird sie als ObjectID verwendet, auch wenn diese Option gewählt wird.
String
in_key_field
[in_key_field,...]
(optional)

Gibt ein Feld oder eine Kombination von Feldern an, die zur eindeutigen Identifizierung einer Zeile in der Abfrage verwendet werden können. Dieser Parameter wird nur verwendet, wenn die Option "USE_KEY_FIELDS" festgelegt wurde.

Mit der nur in ModelBuilder verwendeten Schaltfläche "Feld hinzufügen" können Sie die erforderlichen Felder hinzufügen, um das Dialogfeld auszufüllen und das Modell zu erstellen.

Field
in_field
[[Field, {Alias}],...,...]
(optional)

Die Felder, die in den Layer/die Tabellensicht aufgenommen werden. Wenn ein Aliasname für ein Feld festgelegt wurde, wird dieser angezeigt. Wenn keine Felder angegeben wurden, werden alle Felder aus allen Tabellen aufgenommen.

Value Table
where_clause
(optional)

Ein SQL-Ausdruck, mit dem eine Teilmenge der Datensätze ausgewählt wird. Die genaue Syntax für den Ausdruck hängt von der Datenquelle ab. Wenn Sie beispielsweise File- oder ArcSDE-Geodatabases, Shapefiles, Coverages oder dBASE-/INFO-Tabellen abfragen, schließen Sie Feldnamen in doppelte Anführungszeichen ein:

"MY_FIELD"

Wenn Sie Personal-Geodatabases abfragen, schließen Sie die Felder in eckige Klammern ein:

[MY_FIELD]

In Python werden Zeichenfolgen in zusammenpassende einfache oder doppelte Anführungszeichen eingeschlossen. Um eine Zeichenfolge zu erstellen, die Anführungszeichen enthält (wie bei einer WHERE-Klausel in SQL-Ausdrücken üblich), können Sie die Anführungszeichen (durch einen umgekehrten Schrägstrich) mit Escapezeichen versehen oder die Zeichenfolge mit dreifachem Anführungszeichen versehen. Wenn die gewünschte WHERE-Klausel z. B.

"CITY_NAME" = 'Chicago'

lautet, könnten Sie die ganze Zeichenfolge in doppelte Anführungszeichen einschließen und dann die inneren doppelten Anführungszeichen wie folgt mit Escapezeichen versehen:

" \"CITY_NAME\" = 'Chicago' "

Oder Sie könnten die ganze Zeichenfolge in einfache Anführungszeichen einschließen und dann die inneren einfachen Anführungszeichen wie folgt mit Escapezeichen versehen:

' "CITY_NAME" = \'Chicago\' '

Oder Sie könnten die ganze Zeichenfolge in dreifache Anführungszeichen ohne Escapezeichen einschließen:

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

Weitere Informationen zur SQL-Syntax und zu den Unterschieden zwischen Datenquellen finden Sie im Hilfethema SQL-Referenz für in ArcGIS verwendete Abfrageausdrücke.

SQL Expression

Codebeispiel

MakeQueryTable - Beispiel (Python-Fenster)

Das folgende Skript im Python-Fenster veranschaulicht, wie die Funktion "MakeQueryTable" im unmittelbaren Modus verwendet wird.

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 - Beispiel 2 (eigenständiges Skript)

Das folgende Skript veranschaulicht beispielhaft die Nutzung des Werkzeugs "MakeQueryTable" in der Python-Skriptumgebung.

# 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

Umgebungen

Verwandte Themen

Lizenzinformationen

ArcView: Ja
ArcEditor: Ja
ArcInfo: Ja

11/13/2014