テーブル名を使用して列を修飾するときは、修飾する列を命名したオブジェクトにすることはできません。命名したオブジェクトにすることができない理由を、以下の設定の例で示します。
テーブルtを使用して、以下のように定義します。
CREATE TABLE T (a INT, b INT);
この基本テーブルを使用し、このテーブルに基づいた表示を示して、SQL意味解釈ルーチンが以下の文を解析および解決する方法を見てみましょう。
CREATE VIEW V AS SELECT T.a (NAMED X), X (NAMED Y);
意味解釈ルーチンはこの文を処理するため、名前の順序および解決は、非常に重要になります。
手順 | 列xの状況 | 结果 | それ以外の場合 |
---|---|---|---|
1 | テーブルtにある | 処理されます | |
2 | テーブルtにない | ビューvで列xを探します | 適切なエラー メッセージを表示します |
命名したオブジェクトを文の中で使用するには注意を要することを、以下の例で説明します。
CREATE VIEW V AS SELECT a*5+3 (NAMED X), x*2 (NAMED Y) FROM T;
意味解釈ルーチンは、この文を以下のように分析します。
- テーブルT内の列としてXを探します。
- Xが見つからない場合には、ビューV(命名されたオブジェクト)内で列Xを探します。
以下の例に示すように、指名したオブジェクトの使用は重要です。
CREATE VIEW V AS SELECT a (NAMED b), b (NAMED y) FROM T;
句b (NAMED Y)は、T.bに解釈されることに注意する必要があります。
Tという名前のテーブルはXという名前の列を持っていないため、以下の例は成功しません。Xは指名したオブジェクトであり、列名ではありません。誤った例を以下に示します。
CREATE VIEW v AS SELECT t.a (NAMED X), t.x (NAMED Y);
テーブルTはXという名前の列を持っていないため、この文は失敗します。Xは命名したオブジェクトです。テーブル名を使用して列を修飾した場合、修飾列は命名したオブジェクトにはならない、ということがルールです。