質問
質問は
Which of the following methods for providing explicit names for the columns in a view work? a. Include a column list b. Provide column aliases in the view SELECT statement c. Rename the columns when you select from the view
答え
a. Works: Include a column list b. Works: Provide column aliases in the view SELECT statement c. Does not work: Rename the columns when you select from the view
(c)ビューから選択するときに列の名前を変更することはどういう意味ですか?
解決
認定ガイドの質問の表現は不十分だと思います。ビューから選択するときに列に明示的な名前を付けることができます 、これは機能します:
CREATE VIEW MyView AS SELECT a, b, c FROM MyTable;
SELECT a AS d, b AS e, c AS f FROM MyView;
問題は、列にエイリアスを明示的に与えることではありません。問題は次のとおりです。異なる列名でビューを定義する代わりにこれに依存し、列名があいまいになるようにビューが結合で構成されている場合、問題が発生します:
CREATE VIEW MyView AS
SELECT m.a, m.b, m.c, o.a, o.b, o.c
FROM MyTable m JOIN OtherTable o;
これは有効なビューではありません。ビューの定義では、すべての列名が異なる必要があるためです。たとえば、ビューをクエリすると、あいまいな結果が得られます。
SELECT a FROM MyView;
これは最初の a
列または2番目の a
列を選択しますか?
したがって、ビュー定義に列名の明確なセットが必要です、ビューを照会するときに列名を明確にするだけでは不十分です。
これが、認定ガイドの質問の表現が不十分だったと思う理由です。列の名前を明示的に変更することではなく、ビューの列に異なる名前が付けられるようにすることです。これは列の名前を変更する一般的な理由であるため、おそらく質問を書いている人がそのように書いた理由です。
質問で言及されている他の手法のいずれでも、あいまいさを解決できます。
CREATE VIEW MyView (a, b, c, d, e, f) AS
SELECT m.a, m.b, m.c, o.a, o.b, o.c
FROM MyTable m JOIN OtherTable o;
または
CREATE VIEW MyView AS
SELECT m.a, m.b, m.c, o.a AS d, o.b AS e, o.c AS f
FROM MyTable m JOIN OtherTable o;
どちらの方法でも、エイリアス列を取得できます:
SELECT * FROM MyView; -- returns result with columns a, b, c, d, e, f
他のヒント
「選択時に名前を変更」"それらは確かにビューからAS bを選択
などのようなものを意味します。ビューに明示的で明確な a
を" rename"する必要がないということです...メソッド(a)または(b)[[場合によっては、 " rename"この方法ですが、それはほとんど二次的な問題です!-)]]。