SQL所有子查询的最大值不同

时间:2018-05-11 14:08:38

标签: mysql sql subquery

mysql> select id,name from Employee where salary >= all (select salary from Employee);
Empty set (0.00 sec)

mysql> select id,name from Employee where salary >= all (select max(salary) from Employee);

+--------+------------+
| id     | name       |
+--------+------------+
| 001    | John       |
+--------+------------+
1 row in set (0.00 sec)

为什么第一个查询返回0结果?它应该与第二个查询相同。 薪水栏是十进制(12,2)。

1 个答案:

答案 0 :(得分:2)

不,他们不一样。第一个在一大组比较值中有NULL。有些东西不能更大(或更小或等于)NULL。因此,比较返回NULL。 。 。并且ALL不满意。

第二个返回MAX()值,因为MAX()会忽略NULL

编辑:

在子查询中使用过滤器不会使它们相同,如rextester所示。

如果所有工资值均为NULL,则:

where salary >= all (select salary from e where salary is not null);

返回所有值。没有比较所以all是真的。

另一方面:

where salary >= all (select max(salary) from e);  -- all is irrelevant

不返回任何行,因为NULL比较不正确。