2017-10-22 10 views
0

以下のコードでwhere句とhaving句を置き換えると、where句でunknown column tsalという1054エラーが発生します。どうして?また、私はどこで句を使用する必要がどこで使用する必要があります私は具体的にケースを教えてください。SQLクエリでwhere句が機能しないのはなぜですか?

select employee_id,salary*months as tsal1 
from Employee as h 
having tsal1=(select max(e.tsal) as metsal 
from (select employee_id,salary*months as tsal 
from Employee) as e) 
+0

'where'句でそのエイリアスを使用できない主な理由の1つは、SQLが**クエリ**と同じ順序で実行されないということです。 'from'節と' where'節は** select節の前に**評価されます。私は、この優れたブログを[SQL操作の真実性についての初心者の手引]というトピックでお勧めします(https://blog.jooq.org/2016/12/09/a-beginners-guide-to-the-true -order-of-sql-operations /) –

答えて

0

MySQLはwhere句の中から(select句で定義された)の別名を参照するためにnot allowありません。

ちょうどその別名の表現を繰り返す、この問題を回避するには、次の

select employee_id, salary*months as tsal1 
from Employee as h 
where salary*months=(select max(e.tsal) as metsal 
        from (select employee_id,salary*months as tsal 
          from Employee) as e) 

NBは:2つの内のサブクエリを持つための必要はないはずです。

select employee_id, salary*months as tsal1 
from Employee as h 
where salary*months=(select max(salary*months) from Employee) 
関連する問題