MySQL4.1のEXISTSに関するドキュメントが大変紛らわしいのです。
サブクエリで値がまったく返らない場合、
EXISTS <subquery>
はTRUE
になり、NOT EXISTS <subquery>
はFALSE
になります。 次に例を示します。SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);http://dev.mysql.com/doc/refman/4.1/ja/exists-and-not-exists-subqueries.html
これだと、まるで、
- EXISTS ・・・サブクエリで値が返らない場合、TRUE
- NOT EXISTS・・サブクエリで値が返る場合、TRUE
のようです。
※もちろん、実際には
- EXISTS ・・・サブクエリで値が返らない場合、FALSE
- NOT EXISTS・・サブクエリで値が返る場合、FALSE
という動きをします。
MySQL5.1のドキュメントでは
もしサブクエリが行を返せば、
EXISTS
はsubquery
TRUE
で、NOT EXISTS
はsubquery
FALSE
です。例:SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);
のように変更されているので、誤訳だったのでしょう。
※原文は4.1, 5.1ともに同じ文章です。