データベース クエリ テーブル

データベース クエリ テーブルは、既存のデータベース テーブルやデータベース ビューへの参照ではなく、データベース固有のクエリを含んでいる名前付きテーブルです。クエリはデータベースの SQL 構文で記述され、クエリを MISQL クエリとして指定できない場合 (例えば、サブクエリ、外部結合などを使用する必要がある場合) や、名前付きビュー テーブルよりもパフォーマンスが向上する場合に使用されます。データベース クエリ テーブルを使用しているときは、以下の点を考慮してください。

  • クエリで参照しているテーブルやビューの構造が更新された場合は、属性 volatile を true に設定します。テーブル メタデータはリクエストごとに再作成されるので、この設定がパフォーマンスに影響を与えます。

  • データベース クエリに基づく名前付きテーブルは、挿入、更新、削除の操作をサポートしません。
  • サポートされるデータベースには、Oracle、SQL Server、PostGIS があります。
  • クエリがジオメトリを返す場合は、DBDataSourceMetadata 要素でジオメトリ列を定義する必要があります。
  • クエリがプライマリ キーを返す場合は、KeyAttributes 要素でプライマリ キーを定義する必要があります。

データベース クエリ テーブルは、ビュー テーブルに似ています。ただし、一方を他方よりも優先する条件があります。詳細については、「ビュー テーブル」を参照してください。以下の表に、両者の主な違いを示します。

表 1. データベース クエリ テーブルとビュー テーブルの比較
ビュー テーブル データベース クエリ テーブル

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>