创建查询表 (数据管理)

摘要

此工具可对数据库应用 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,...]

要在查询中使用的一个表或多个表的名称。如果列出多个表,“表达式”参数可用于定义这些表的连接方式。

输入表可以来自 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 选项后使用此参数。

“添加字段”按钮(只能在模型构建器中使用)可用于添加所需字段,以便您可以完成对话框并继续构建模型。

Field
in_field
[[Field, {Alias}],...,...]
(可选)

要包含在图层或表视图中的字段。如果为字段设置了一个别名,则这个别名就是显示的名称。如果未指定任何字段,则将包含所有表中的所有字段。

Value Table
where_clause
(可选)

用于选择记录子集的 SQL 表达式。表达式的语法会因数据源的不同而稍有不同。例如,如果要查询文件或 ArcSDE 地理数据库、shapefile、coverage、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