2017-11-05 9 views
1

私の同僚から質問がありましたが、それは愚かな質問かもしれませんが、私はその場で答えを出すことができませんでした。エイリアスはどのようにSQLで動作しますか?

私はそれはそれは両方のテーブルの上に見つけることができることは明らかだ次のクエリ

SELECT sc.custid, contactname, orderid, empid 
FROM Sales.Customers sc 
INNER JOIN Sales.Orders so ON sc.custid = so.custid; 

custidを持っています。 contactnameSales.Customersテーブルに属し、orderidおよびempidSales.Ordersに属します。ここまでは順調ですね。

ステートメントの先頭にエイリアスを入力すると、名前があいまいであるというエラーが表示されます。これは両方のテーブルに存在するため正しいものです。しかし、エイリアスを使用してcustidを取得するテーブルとそのテーブルを定義すると、その後、他の3つのカラムにエイリアスを使用する必要がなくなり、クエリが正常に完了しました。どうして?

私はSQLの初心者ですので、それは来るように質問を扱います。ありがとう

+1

他の3つの列名があいまいでない場合、それらを明確にする必要はありません。 –

+1

Bobという名前の2人の友達がいるとします。 1つはBob Smith、もう1つはBob Fooです。ボブの両親の友人に「一度ボブと私...」と言うことで話を説明しなければならない場合、彼らはどのボブに尋ねるでしょうか?しかし、あなたが「一度ボブ・スミスと私は...」と言ったら、彼らはあなたが話していることをすぐに知るでしょう。エイリアスは、同じ列名を持つテーブル内の関連付けを明確にすることです。 – Simon

+2

@cdrrrrr、私はあなたがテーブル名またはエイリアスで複数テーブルのクエリで列名を修飾する習慣を作ることをお勧めします。そのため、基礎となるスキーマに精通していないユーザーにとっては、クエリを理解しやすく維持しやすくなります。 –

答えて

0

他の列に別名を明示的に指定する必要がない理由は、という他の列が、クエリに指定されたすべてのテーブルにわたって一意であり、テーブル名なしで識別できるためです。曖昧な場合はいつでも、あなたのcustId列のように、どのテーブルから列を使用するかを指定する必要があります。あなたのケースでは:あなたが気づいているかもしれませんが

sc.custId is same as Sales.Customer.custId 

aliasを使用して一つの利点は、それがはるかに少ないタイピングを必要とすることです。

関連する問題