sql - SQL 查询的意外结果

标签 sql

任何人都可以解释为什么这个查询:

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);
                     )

最佳答案

第一个返回满足以下条件的所有员工:

  • 该员工所在的部门有一名“u”员工。
  • 该员工的工资高于平均水平。

第二个返回满足这些条件的所有员工:

  • 该员工所在的部门有一名“u”员工,该员工的薪资高于平均水平。

两者的条件截然不同。我不希望他们返回相同的结果集。

此外,只要查询中有多个表,您就应该使用表名缩写的表别名并且您应该限定所有列名称。

关于sql - SQL 查询的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44699261/

相关文章:

php - 选择查询的顺序在准备好的语句中不起作用

java - hibernate 中字符串字段与字符串数组的交集

mysql - 为什么 1582 中的两个 MySQL 日期看起来相同,但比较结果是错误的?

mysql - ORDER BY 基于最大行数出现

mysql - 如何与其他列的条件相加

mysql - 在sql查询中连接属性

sql - 在 SQL Server 中填充值

mysql - SQL 查询来比较个人平均值和组平均值

sql - 数据类型为 "timestamp with time zone"的时区存储

php - 如何将数字格式化为十进制以将其存储在 mysql 中?