2011-12-14 8 views
3
にANY

私は100万を超える予算を持つ唯一の部門を管理するマネージャーのENAMESを見つけようとしていますがHAVING書きますが、500万EVERYをHAVINGとMySQL

Iより少ない予算で少なくとも一つの部門する別の方法クエリがこのように動作するはずですが、Mysqlで実行することはできません。私が推測しているのは、EveryとAnyの方がmysqlで動作しないからです。これを書き換える別の方法はありますか?また、ここでは、スキーマ

Emp(eid: integer, ename: string, age: integer, salary: real) 
Works(eid: integer, did: integer, pct_time: integer) 
Dept(did: integer, dname: string, budget: real, managerid: integer) 

であり、ここでのクエリです:あなたは暗黙結合を使用している

select 
    e.ename 
from 
    emp e, dept d 
where 
    e.eid=d.managerid 
group by 
    e.eid, e.ename 
having 
    every(d.budget>1000000) and 
    any(d.budget<5000000); 
+1

- マーティン・スミスは、明示的に参加使用していることに注意してください。 –

答えて

3
SELECT e.ename 
FROM emp e 
     JOIN dept d 
     ON e.eid = d.managerid 
GROUP BY e.eid, 
      e.ename 
HAVING MIN(d.budget) > 1000000 
     AND MIN(d.budget) < 5000000; 
+0

私はこれで正しい結果プールを取り戻すつもりはありません。私は空のセットを取り戻しています。 – user964381

+0

@ user964381 - おそらく、あなたはその基準を満たしているマネージャーを持っていないでしょう。 –

+0

@James - いいえ、それは左の結合であってはなりません。従業員が部門を管理していない場合、結果に含まれる基準を満たしていないことは間違いありません。 –

関連する問題