摘要
此工具可对数据库应用 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)。
| 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: 是