oracle运算符all是关于集合的,如果集合为空,即取不到值,它与任何的<>、=等的比较,都返回真。奇怪....
SQL> SELECT 1 result FROM dual WHERE 1<>1;
RESULT
---------
SQL>
SQL> SELECT 1 RESULT
2 FROM dual
3 WHERE 1 <> ALL (SELECT 2 RESULT
4 FROM dual
5 UNION
6 SELECT 3 RESULT FROM dual);
RESULT
---------
1
SQL>
SQL> SELECT 1 RESULT
2 FROM dual
3 WHERE 1 <> ALL (SELECT 2 RESULT FROM dual WHERE 1 <> 1);
RESULT
---------
1
SQL>