ArcGIS Desktop

  • 文档
  • 支持

  • My Profile
  • 帮助
  • Sign Out
ArcGIS Desktop

ArcGIS Online

专为贵组织打造的制图平台

ArcGIS Desktop

全面的专业性 GIS

ArcGIS Enterprise

面向企业的 GIS

ArcGIS for Developers

用于构建位置感知应用程序的工具

ArcGIS Solutions

适用于行业的免费模板地图和应用程序

ArcGIS Marketplace

获取适用于组织的应用程序和数据

  • 文档
  • 支持
Esri
  • 登录
user
  • 我的个人资料
  • 登出

ArcMap

  • 主页
  • 入门
  • 地图
  • 分析
  • 管理数据
  • 工具
  • 扩展模块

创建查询表

  • 摘要
  • 用法
  • 语法
  • 代码示例
  • 环境
  • 许可信息

摘要

此工具可对数据库应用 SQL 查询,并在图层或表视图中表示结果。查询可用于连接多个表或返回数据库的原始数据中的列或行的子集。

此工具可接受来自 ArcSDE 地理数据库、文件地理数据库、个人地理数据库或 OLE DB 连接的数据。

用法

  • 由于此工具创建的图层是临时图层,因此如果不保存文档,该图层将在会话结束后消失。

  • 所有的输入要素类或表必须来自同一输入工作空间。

  • 如果将“形状”列添加到字段列表,结果将为图层,否则将为表视图。

  • 如果输出结果为图层,则可以使用保存至图层文件工具将输出结果保存在图层文件中,也可以使用复制要素工具将其保存到要素类。

  • 字段列表中字段的顺序表示这些字段将在输出图层或表视图中出现的顺序。

  • 该工具可用于提供关键字段选项和关键字段列表。此信息定义行的唯一识别方式,并可用于将动态生成的 ObjectID 列添加到数据。如果没有 ObjectID 列,将不会支持选择。

  • 如果需要多个列的组合来定义唯一值,可以通过关键字段列表选择这些列。

  • 如果使用了 SQL 表达式但却未返回任何匹配记录,则输出要素类将为空。

  • 可以连接要素类,但字段列表最多只能包含一个几何类型字段。如果添加多个几何列,工具会在您单击确定时显示出错,执行也会停止。

  • 有关表达式参数语法的详细信息,请参阅构建 SQL 表达式或 SQL 参考。

  • 字段和关键字段参数的添加字段按钮只能在模型构建器中使用。在模型构建器中,如果先前的工具尚未运行或其派生数据不存在,则可能不会使用字段名称来填充字段和关键字段参数。“添加字段”按钮可用于添加所需字段,以完成“创建查询表”对话框并继续构建模型。

  • 如果输入表来自文件地理数据库,这些表通常会按在“输入表”参数中列出的顺序进行连接。例如,如果 Table1 列于 Table2 之前,则将对 Table2 进行连接,方法为从 Table1 中取出一行,然后再从 Table2 中获取匹配行。但是,假如这造成了对 Table2 的无索引字段进行查询,而反转顺序会造成对 Table1 的有索引字段进行查询,那么将会反转顺序以试图获得最佳性能。使用此工具处理文件地理数据库数据时,这是唯一起作用的查询优化逻辑。通常,当连接方式为一对多和一对一时,文件地理数据库中的连接会达到最佳性能。

语法

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 表达式。有关 SQL 语法的详细信息,请参阅帮助主题在 ArcGIS 中使用的查询表达式的 SQL 参考。

SQL Expression

代码示例

MakeQueryTable 示例(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下使用 MakeQueryTable 函数。

import arcpy
arcpy.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.
 
# 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 as err:
    print(err.args[0])

环境

  • 当前工作空间

许可信息

  • ArcGIS Desktop Basic: 是
  • ArcGIS Desktop Standard: 是
  • ArcGIS Desktop Advanced: 是

相关主题

  • 图层和表视图工具集概述
  • 使用图层和表视图
  • 使用图层和表视图
  • 使用“创建查询表”的查询的示例

ArcGIS Desktop

  • 主页
  • 文档
  • 支持

ArcGIS 平台

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

关于 Esri

  • 关于我们
  • 招贤纳士
  • 内部人员博客
  • 用户大会
  • 开发者峰会
Esri
分享您的想法。
© Copyright 2016 Environmental Systems Research Institute, Inc. | 隐私政策 | 法律声明