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)。
答案 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
比较不正确。