MySQL JOIN 子查询为假。子查询会执行吗?

标签 mysql join

考虑这个 MySQL 查询

SELECT <cols> FROM <tbl> INNER|LEFT JOIN (SELECT ...) AS sub_query ON FALSE

当然,由于 ON,无论 tblsub_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/

相关文章:

mysql - 使用存储过程保留最新 3 条记录来删除所有记录

php mysql 查询输出文件

sql - 对于特定列的每个不同值,选择除第一行之外的所有行

python - 使用 join 在 python 中创建字典

python - Pandas 对字典提供的 Dataframe 的特定行求和

mysql - 如何获取用户列表?

php - 为什么我不能使用 'required' 函数编写我的 MySQL 数据库?

mysql - 玩2.4框架和MySQL

mysql - 连接两个表并合并mysql中的公共(public)列

mysql - 如何将同一表中的总值显示为一行(在 case 语句中)?