考虑这个 MySQL 查询
SELECT <cols> FROM <tbl> INNER|LEFT JOIN (SELECT ...) AS sub_query ON FALSE
当然,由于 ON
,无论 tbl 或 sub_query 中有什么,这都会产生一个空结果集。陈述总是错误的。
在我的情况下,我唯一可以控制的部分是 ON 语句。
我的问题是,MySQL 是否足够智能以检测到这种情况?然后完全跳过运行子查询并立即返回空结果集?
最佳答案
我们可以测试一下:
mysql> explain select * from mdl_user join (select 1) q on false;
+----+-------------+-------+------+---------------+------+---------+------+------+------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------+
| 1 | PRIMARY | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE |
| 2 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------+
2 rows in set (0.02 sec)
mysql> select * from mdl_user join (select 1) q on false;
Empty set (0.00 sec)
这似乎表明是的,MySQL 检测到 on false
条件,并且不会打扰整个连接。
(抱歉,当时我埋头于moodle数据库)
关于MySQL JOIN 子查询为假。子查询会执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494661/