标注 | 说明 | 数据类型 |
输入表 | 要在查询中使用的一个表或多个表的名称。 如果列出多个表,表达式参数可用于定义这些表的连接方式。 输入表可来自地理数据库或数据库连接。 | Table View; Raster Layer |
表名 | 将创建的图层或表视图的名称。 | Table View; Raster Layer |
关键字段选项 | 指定将如何针对查询生成 Object ID 字段(如果存在)。 ArcGIS 中的图层和表视图需要 Object ID 字段。 Object ID 字段是一个整型字段,用于唯一标识正在使用的数据中的行。
| String |
关键字段 (可选) | 将用于唯一识别查询中的一行的字段或字段组合。 此参数仅在将关键字段选项参数设置为使用关键字段时使用。 | Field |
字段 (可选) | 将包含在图层或表格视图中的字段。 如果为字段设置了一个别名,则这个别名就是显示的名称。 如果未指定任何字段,则将包含所有表中的所有字段。 如果将 Shape 字段添加到字段列表,结果将为图层,否则将为表视图。 | Value Table |
表达式 (可选) | 用于选择记录子集的 SQL 表达式。 | SQL Expression |
摘要
可对数据库应用 SQL 查询,并在图层或表视图中表示结果。 查询可用于连接多个表或返回数据库的原始数据中的字段或行的子集。
此工具可接受来自地理数据库或 OLE DB 连接的数据。
使用情况
由于此工具创建的图层是临时图层,因此如果不保存文档,该图层将在会话结束后消失。
所有的输入要素类或表必须来自同一输入工作空间。
如果将 Shape 字段添加到字段列表,结果将为图层,否则将为表视图。
字段列表中字段的顺序为这些字段将在输出图层或表视图中出现的顺序。
提供关键字段选项和关键字段列表。 此信息定义行的唯一识别方式,并可用于将动态生成的 Object ID 字段添加到数据。 如果没有 Object ID 字段,将不会支持选择。
如果需要多个字段的组合来定义唯一值,则可以从关键字段列表中选择这些字段。
如果使用了 SQL 表达式但却未返回任何匹配记录,则输出要素类将为空。
可以连接要素类,但字段列表最多只能包含一个几何类型字段。
有关表达式参数的语法的详细信息,请参阅 SQL 模式。
如果输入表来自文件地理数据库,这些表通常会按在输入表参数中列出的顺序进行连接。 例如,如果 Table1 列于 Table2 之前,则将对 Table2 进行连接,方法为从 Table1 中取出一行,然后再从 Table2 中获取匹配行。 但是,假如这造成了对 Table2 的无索引字段进行查询,而反转顺序会造成对 Table1 的有索引字段进行查询,那么将会反转顺序以试图获得最佳性能。 使用此工具处理文件地理数据库数据时,这是唯一起作用的查询优化逻辑。 通常,当连接方式为一对多或一对一时,文件地理数据库中的连接会达到最佳性能。
参数
arcpy.management.MakeQueryTable(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 | 指定将如何针对查询生成 Object ID 字段(如果存在)。 ArcGIS 中的图层和表视图需要 Object ID 字段。 Object ID 字段是一个整型字段,用于唯一标识正在使用的数据中的行。
| String |
in_key_field [in_key_field,...] (可选) | 将用于唯一识别查询中的一行的字段或字段组合。 此参数只能在将 in_key_field_option 参数设置为 USE_KEY_FIELDS 时使用。 | Field |
in_field [[field, {alias}],...] (可选) | 将包含在图层或表格视图中的字段。 如果为字段设置了一个别名,则这个别名就是显示的名称。 如果未指定任何字段,则将包含所有表中的所有字段。 如果将 Shape 字段添加到字段列表,结果将为图层,否则将为表视图。 | Value Table |
where_clause (可选) | 用于选择记录子集的 SQL 表达式。 | SQL Expression |
代码示例
以下 Python 窗口脚本演示了如何在即时模式下使用 MakeQueryTable 函数。
import arcpy
arcpy.env.workspace = "C:/data/data.gdb"
arcpy.management.MakeQueryTable(["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'")
以下脚本是如何在 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.management.MakeQueryTable(tableList, lyrName,"USE_KEY_FIELDS", keyField, fieldList, whereClause)
# Print the total rows
print(arcpy.management.GetCount(lyrName))
# Print the fields
fields = arcpy.ListFields(lyrName)
for field in fields:
print(field.name)
# Save as a dBASE file
arcpy.management.CopyRows(lyrName, "C:/temp/calinfo.dbf")