2017-06-22 155 views
2

任何人都可以解释为什么这个查询:意外的结果

SELECT employee_id, last_name, salary 
FROM employees 
WHERE department_id IN (SELECT department_id 
        FROM employees 
        WHERE last_name LIKE '%u%' 
        ) 
AND salary > (SELECT AVG(salary) 
      FROM employees); 

回报的方式行比这个嵌套一个都不能少:

SELECT employee_id, last_name, salary 
FROM employees 
WHERE department_id IN (SELECT department_id 
        FROM employees 
        WHERE last_name LIKE '%u%' 
        AND salary > (SELECT AVG(salary) 
            FROM employees); 
        ) 

回答

2

第一返回谁符合下列条件的所有员工:

  • 员工在一个部门有一个“你”的员工。
  • 员工的工资大于平均水平。

第二返回谁符合这些条件的所有员工:

  • 员工是在具有“U”型的员工谁拥有的薪水比一般的大部门。

这两者是非常不同的条件。我不希望他们返回相同的结果集。此外,只要您在查询中有多个表格,就应该使用表名称的缩写表别名,您应该限定所有列名称。

+0

谢谢,我猜想一个愚蠢的问题,我意识到现在你已经明确地说过了。 – ketflix

+0

难道员工的姓氏中包含“u”吗? –

+0

@TimothyG。 。 。 。我只是缩短了描述。 –