MySQL 如何将子查询转换为INNER JOIN?
为了使其理解,我们使用以下表中的数据−
mysql>从客户选择*;
+-------------+----------+
|客户_ID |名称 |
+-------------+----------+
| 1 | Rahul |
| 2 | Yashpal |
| 3 | Gaurav |
| 4 | Virender |
+-------------+----------+
共有4行(0.00秒)
mysql>从reserve选择*;
+------+------------+
| ID |Day |
+------+------------+
| 1 | 2017-12-30 |
| 2 | 2017-12-28 |
| 2 | 2017-12-25 |
| 1 | 2017-12-24 |
| 3 | 2017-12-26 |
+------+------------+
共有5行(0.00秒)
现在,以下是一个子查询,将找到所有预订汽车的客户名称。
mysql>从客户选择名称WHERE customer_id在(从reserve选择id)中;
+----------+
|名称 |
+----------+
| Rahul |
| Yashpal |
| Gaurav |
+----------+
共有3行(0.00秒)
现在,通过以下步骤,我们可以将上述子查询转换为内连接−
- 将子查询中命名为’Reserve’的表移动到FROM子句中。
-
WHERE子句将customer_id列与从子查询返回的id进行比较。
因此,将表的id列之间的表达式转换为显式的直接比较。
mysql>从客户,储备选择名称WHERE customer_id = id;
+----------+
|名称 |
+----------+
| Rahul |
| Yashpal |
| Yashpal |
| Rahul |
| Gaurav |
+----------+
共有5行(0.00秒)
正如我们所看到的那样,上述结果并不完全与子查询的结果相同,因此使用DISTINCT关键字获取与下列结果相同的结果:
mysql>从客户,预留中选择DISTINCT名称WHERE customer_id = id;
+----------+
|名称 |
+----------+
| Rahul |
| Yashpal |
| Gaurav |
+----------+
共有3行(0.03秒)
阅读更多:MySQL 教程