Hi!
 

 SELECT 
     e.emp_no 
 FROM employee e 
     JOIN employee_project p ON p.emp_no = e.emp_no 
 GROUP BY e.emp_no 
 HAVING MAX((SELECT 
                 SUM(e2.salary) 
             FROM employee e2 
                 JOIN employee_project p2 ON p2.emp_no = e2.emp_no 
             WHERE e2.emp_no = e.emp_no AND 
                   p2.proj_id IS NOT DISTINCT FROM p.proj_id)) <> 0 

 

 This is accepted by Firebird (also by Oracle).
 

 In the subselect p.proj_id should not be accepted - group does not contains 
it, and has no aggregate on it. What value the engine choose when it runs, and 
why?
 

 

 Is this equivalent with it?

 

 SELECT 
     e.emp_no 
 FROM employee e 
     JOIN employee_project p ON p.emp_no = e.emp_no 
 GROUP BY e.emp_no 
 HAVING (SELECT 
                 SUM(e2.salary) 
             FROM employee e2 
                 JOIN employee_project p2 ON p2.emp_no = e2.emp_no 
             WHERE e2.emp_no = e.emp_no AND 
                   p2.proj_id IS NOT DISTINCT FROM MAX(p.proj_id)) <> 0 

Reply via email to