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 查询,并在图层或表视图中表示结果。查询可用于连接多个表或返回数据库的原始数据中的字段或行的子集。

此工具可接受来自地理数据库或数据库连接的数据。

用法

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

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

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

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

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

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

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

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

  • 可以连接要素类,但字段列表最多只能包含一个几何类型字段。

  • 有关表达式参数语法的详细信息,请参阅构建查询表达式或在 ArcGIS 中使用的查询表达式的 SQL 参考。

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

  • 如果输入表来自文件地理数据库,这些表通常会按在输入表参数中列出的顺序进行连接。例如,如果 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,...]

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

输入表可来自地理数据库或数据库连接。

Table View; Raster Layer
out_table

将通过该工具创建的图层或表视图的名称。

Table View; Raster Layer
in_key_field_option

ArcGIS 中的图层和表视图需要 ObjectID 字段。ObjectID 字段是一个整型字段,用于唯一标识正在使用的数据中的行。在此工具中,此参数用于表示如何针对查询生成 ObjectID 字段(如果存在)。默认字段是使用关键字段(Python 中的 USE_KEY_FIELDS)。

  • USE_KEY_FIELDS —这表示在关键字段参数中选择的字段可用于唯一标识输出表中的行。该字段可以是单一字段也可以是多个字段的组合,合并后可唯一标识输出表中的行。如果未在关键字段列表中选择任何字段,则会自动应用生成关键字段选项(Python 中的 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}],...]
(可选)

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

Value Table
where_clause
(可选)

用于选择记录子集的 SQL 表达式。

SQL Expression

代码示例

MakeQueryTable 示例 1(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
 
# Local variables...
tableList = ["c:/Connections/balrog.odc/vtest.COUNTIES",\
             "c:/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")

环境

  • 当前工作空间

许可信息

  • 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 © 2018 Esri. | 隐私政策 | 法律声明