2016-08-29 15 views
0

私は、このSQLクエリを持っている:このSQLクエリで "as"キーワードを使用する必要があるのはなぜですか?

select top(1) 
    salary 
from 
    (select top(2) salary 
    from employee 
    order by salary desc) as b 
order by 
    salary asc 

私はas bを利用しない場合、それは私にエラーを与える:

Incorrect syntax near ...

は、なぜ、このクエリでasを使用する必要がありますか?

+2

この質問に対する回答(および投票者)は、すべて場所にあります。答えは、SQL Serverでは、すべての派生テーブルにエイリアスを指定する必要があることだけです。エラーメッセージは非常に不明です。 – sstan

+1

さらにもう一つは、 'top(1)salary'の代わりに' min(salary) 'を使うことができます。 – Wanderer

答えて

4

キーワードasは不要です。実際には、カラム別名にはasを使用することをお勧めしますが、テーブル別名には使用しないことをお勧めします。あなたは、SQL Serverがfrom句内のすべてのサブクエリが命名されている必要があるため、サブクエリのテーブルの別名が必要です

select top(1) salary 
from (select top(2) salary 
     from employee 
     order by salary desc 
    ) b 
order by salary asc; 

:だから、私はこのように書きます。

+0

:)' as'の良い点。 – Serg

1

「給料」を2回使用しているためです。エイリアスがなければ、通訳者は結果を注文するために何の給料か分かりません。エイリアスを使用すると、employee.salaryとb.salaryを区別できます。

+1

OPクエリのSELECTで直接 'employee'を参照する方法がありません – Serg

0

2つのクエリを作成しています。最初の1つは従業員から上位2つの給与を選択します。このリストを "b"と呼んでいます。次に、あなたは "b"から最高給料を選択しています。

3

これはTSqlの構文です。 FROMの副問合せでは、使用されていなくてもエイリアスが必要です。たとえば、Oracleではこのエイリアスはオプションです。

0

異なるアプローチが第二最高の給料を得るために...あなたは第三または第四が必要かのようにあなたはアプローチがはるかに挑戦的になるだろうね...あなたは、サブを持っているので

SELECT * 
FROM (SELECT salary, row_number() over (order by salary desc) rn 
     FROM employee) E 
WHERE rn = 2 
2

これは、

When a derived table, rowset or table-valued function, or operator clause (such as PIVOT or UNPIVOT) is used, the requiredtable_alias at the end of the clause is the associated table name for all columns, including grouping columns, returned.

派生テーブルとサブクエリの種類は、あなたのSQL文で使用することが意図されていることに注意してください:

012 -queryそれは、 the Transact-SQL documentation on FROMによると、必須の別名を使用しています

derived_table
Is a subquery that retrieves rows from the database. derived_table is used as input to the outer query.

関連する問題