この問題は MySQL の最新バージョンに存在するため、それがバグであるとは思えません。
以下に 2 つのテーブルを示します。
t1(id int), values (10),(2)
t2(id int), values (0),(null),(1)
実行する:
select id from t1 where id > all (select id from t2);
返される結果セット:
+------+
| id |
+------+
| 10 |
| 2 |
+------+
私の知識とページhttp://dev.mysql.com/doc/refman/5.5/en/all-subqueries.htmlによると
ステートメントは空の結果を返す必要があります! 次のように、「where」の各判断が null になるためです。
select id > all (select id from t2) as c1 from t1;
戻り値:
+------+
| c1 |
+------+
| NULL |
| NULL |
+------+
実際にselect id from t1 where null;
は何も返されません!
最後に、私はこれを試しました:
explain extended select id from t1 where id > all (select id from t2);
show warnings;
+-------+------+-------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+-------+------+-------------------------------------------------------------------------------------------------------------------------------------+
| Note | 1003 | select `test`.`t1`.`id` AS `id` from `test`.`t1` where <not>((`test`.`t1`.`id` <= (select max(`test`.`t2`.`id`) from `test`.`t2`))) |
+-------+------+-------------------------------------------------------------------------------------------------------------------------------------+
セットで 1 行 (0.00 秒)
MySQL が元の SQL をこの SQL に最適化し、実際に結果セットに適合することがわかります。
しかし、最適化された SQL が元の SQL と等しいとは思いません。
私が間違っている?