2016-12-19 12 views
1

私は3つのテーブルと選択された特定のカラムを使って結合しました。いくつかは、対応するテーブルの接頭辞を持ち、一部は接頭辞を持ちません。 例:SQLにカラムのテーブル名がありません

Select a.column1 as column1, b.column2 as column2, column3 as column3, b.column4 as column4, c.column5 as column5, b.column6 as column6 from a, b, c where a.column1 = b.column1 and *column10* = b.column5 

特定の特定のテーブルの列とするときではないとして、いくつかの列をマークすることが必要なのか? SQL文を調べるだけで、特定の列がどのテーブルかを調べる方法はありますか? (たとえば、列3または列10)

ありがとう!

+1

一部の表には列名が重複していますが、各列に別名を付けると、結合を実行するときに複数の表にある同じ名前の列を区別するのに役立ちます。しかし、経験則として、エイリアスを使用することは一般的には良い考えです。 – Terry

+0

こんにちは@Terry、答えとして入れてください。お返事ありがとうございます。 –

+0

これまでのご回答ありがとうございました。あなたの応答は本当にSQLの私の理解を向上させるのに役立ちました。あなたの回答を理解する限り、列名が別のテーブルにない場合、接頭辞は必要ありません。したがって、私は結論として、順序付けのようなものはないと考えています(例えば、column2としてcolumn2、column3としてcolumn3 - > column3はテーブルbからのものではありません)。 – Simon

答えて

1

わかりやすく読みやすくするために、カラム名に接頭辞としてテーブル名やテーブルエイリアスを付けることをお勧めしますが、カラム名がの場合、複数のテーブルにが重複していて、実際にフェッチしようとしているテーブルの列を指定する必要があります。あいまいな列名エラー

0

各列のエイリアスが重複しているテーブルがあります。 結合を実行するときに複数のテーブルにわたって同じ名前の列を区別する。しかし、一般的には、混乱する可能性のある状況が発生するのを避けるため、エイリアスを使用することをお勧めします。

MAX(table1.ProductID)のように、列名に演算子を使用している場合にも便利です。列を直接参照するのではなく、MAX(table1.ProductID) AS MaxProductIDを使用すると、列の参照をよりわかりやすくわかりやすくすることができます。

0

この回答には簡単な履歴レッスンが必要です。

リレーショナル・モデルでは、2つのリレーションの間の操作でリレーションが生成され、リレーションには重複する列はありません。最も初期のバージョンのSQL(1970年代!)では、テーブル式に重複する列が存在する可能性があると判断されました。しかし、それらを区別する方法は?選択された解決策は、すでにデータベース理論に存在していた概念である範囲変数を使用することでした。

注意SQL標準(1980年代に始まった!)では、「相関名」という用語を使用していました(「相関」の概念がないにもかかわらず)。ほとんどのベンダーの文献、つまりほとんどのSOユーザーは、 'テーブルエイリアス'という用語を使用しています(の行の代わりに適切ではありません)。文献では「範囲変数」という用語を使用しています(「表の行の範囲」のように)。

後でSQLに導出テーブルを導入すると、重複列を許可するというエラーが実現しました。一意の列名の要件は、先頭から派生テーブルに対して適用されますが、SQL言語から廃止または削除されるものは何もないため、クエリーの最上位レベルの結果に重複する列名が許可されます。

1992年(1990年代!)では、非リレーショナルSQL演算子に訂正されたバージョンが与えられました。 UNIONUNION CORRESPONDINGとなり、JOINNATURAL JOINとなった。だから、構文

SELECT * FROM a NATURAL JOIN b 

は、同じ名前の列に等価演算子を使用してテーブルを結合範囲変数を使用する必要がない、そして得られたテーブル式ます加わる最新ます使用して

カラム名が重複していない。

つまり、あなたの例ではうまくいかないでしょう!その場でそれを作りましたか? 2つのテーブルにはcolumn5という共通の列がありますが、それらを使用して結合するのは奇妙です。代わりにcolumn5column10に参加させることを選択します。これらが実表である場合、実現するよりも深刻な問題があります。

関連する問題