2016-10-08 5 views
0

46000未満の従業員名を返すためにサブクエリを結合しようとしています。正しい結果をサブクエリするにはどうすればいいですか

これは私がそれをやっているところです。

Select e.eid, e.ename 
From employee_table e 
Inner Join (
Select salary, eid 
from salary 
Where salary > 46000 
) as s 
On e.eid = s.eid; 
+0

私は '>'ではなく '<'で始まります。 –

+0

あなたは 'e.eid、e.ename'を選択します。名前だけが必要な場合は、 'select e.ename'を選択します。 –

答えて

0

を使用することができますので、給料はなく、個別の給与テーブルで、社員テーブルに格納されていません。給与テーブルには従業員IDが含まれています。これにより、これは1:nの関係になります。つまり、1人の従業員が複数の給与を持つことができます。

私はあなたのテーブルを知らないので、私はこれの理由を知らない。従業員には多くの仕事があり、基本給与や追加給与などの給与の一部がある場合や、給与が有効期限であることを示す日付範囲がある場合などです。知りません。

単純に、従業員の給与を加算して合計を得ることができます。その後、従業員テーブルから従業員名を選択します。従業員テーブルでは、給与テーブルで給与が46000未満です。

select ename 
from employee 
where eid in 
(
    select eid 
    from salary 
    group by eid 
    having sum(salary) < 46000 
); 
2

これを使用すると、EID列一時dinamicaのこの値を含まないテーブルや参加中句の

Select e.eid, e.ename 
    From employee_table e 
    Inner Join (
     Select salary, eid 
     from salary 
     Where salary < 46000 
) as s 
    On e.eid = s.eid; 

を失敗を選択しない場合は、動の一時テーブルを使用しているbeacuseあなたは、内側には動の一時テーブルなし

に参加
Select e.eid, e.ename 
    From employee_table e 
    INNER JOIN salary s On e.eid = s.eid 
    where s.salary < 46000 
関連する問題