データベース クエリ テーブル
データベース クエリ テーブルは、既存のデータベース テーブルやデータベース ビューへの参照ではなく、データベース固有のクエリを含んでいる名前付きテーブルです。クエリはデータベースの SQL 構文で記述され、クエリを MISQL クエリとして指定できない場合 (例えば、サブクエリ、外部結合などを使用する必要がある場合) や、名前付きビュー テーブルよりもパフォーマンスが向上する場合に使用されます。データベース クエリ テーブルを使用しているときは、以下の点を考慮してください。
-
クエリで参照しているテーブルやビューの構造が更新された場合は、属性 volatile を true に設定します。テーブル メタデータはリクエストごとに再作成されるので、この設定がパフォーマンスに影響を与えます。
- データベース クエリに基づく名前付きテーブルは、挿入、更新、削除の操作をサポートしません。
- サポートされるデータベースには、Oracle、SQL Server、PostGIS があります。
- クエリがジオメトリを返す場合は、DBDataSourceMetadata 要素でジオメトリ列を定義する必要があります。
- クエリがプライマリ キーを返す場合は、KeyAttributes 要素でプライマリ キーを定義する必要があります。
データベース クエリ テーブルは、ビュー テーブルに似ています。ただし、一方を他方よりも優先する条件があります。詳細については、「ビュー テーブル」を参照してください。以下の表に、両者の主な違いを示します。
ビュー テーブル | データベース クエリ テーブル |
---|---|
MISQL クエリを使用する。 |
データベース固有のクエリを使用する。これはデータベースに作成されたビューに似ている。 |
結合クエリは異なるデータ ソースの名前付きテーブルをサポートしている。 | 結合クエリは同じデータベース内のテーブルとビューを参照しなければならない。 |
データ プロバイダに応じて演算子を委任する。 | Attributes Comparison および EnvelopeIntersects 演算子のみを委任する。 |
ネストされた SQL クエリをサポートしない。 | ネストされた SQL クエリおよびデータベース固有の SQL クエリをサポートする。 |
委任規則
Attribute Comparison および EnvelopesIntersect 演算子がデータベースに委任されます。
例
データベース クエリ テーブルの例を以下に示します。
<?xml version="1.0" encoding="UTF-8"?>
<NamedDataSourceDefinition xmlns="http://www.mapinfo.com/mxp" xmlns:gml="http://www.opengis.net/gml" version="MXP_NamedResource_1_5">
<ConnectionSet>
<NamedConnectionRef resourceID="/oracle_db_connection">
<ConnectionName>connection1</ConnectionName>
</NamedConnectionRef>
</ConnectionSet>
<DataSourceDefinitionSet>
<DBDataSourceDefinition id="id1" readOnly="false" volatile="false">
<DataSourceName>WORLD</DataSourceName>
<ConnectionMember>
<ConnectionName>connection1</ConnectionName>
</ConnectionMember>
<DBQuery>
<Query>Select MI_Prinx, GEOM, Country, Capital from World where Country in('Canada','India')</Query>
</DBQuery>
<DBDataSourceMetadata>
<FeatureGeometryAttribute srsName="epsg:4326">GEOM</FeatureGeometryAttribute>
<KeyAttributes>
<AttributeName>MI_Prinx</AttributeName>
</KeyAttributes>
</DBDataSourceMetadata>
</DBDataSourceDefinition>
</DataSourceDefinitionSet>
<DataSourceRef ref="id1" />
</NamedDataSourceDefinition>