MySQL 如何将子查询转换为LEFT JOIN?
为了更好地理解,我们将使用以下表中的数据。
mysql> Select * from customers;
+-------------+----------+
| Customer_Id | Name |
+-------------+----------+
| 1 | Rahul |
| 2 | Yashpal |
| 3 | Gaurav |
| 4 | Virender |
+-------------+----------+
共 4 行(0.00 秒)
mysql> Select * from 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> Select Name from customers where customer_id NOT IN (Select id From reserve);
+----------+
| Name |
+----------+
| Virender |
+----------+
共 1 行(0.00 秒)
使用以下步骤,我们可以将上面的子查询转换为RIGHT join –
- 将子查询中命名为’Reserve’的表移到FROM子句中,并使用LEFT JOIN将其与“Customers”连接起来。
- WHERE子句将customer_id列与子查询返回的id进行比较。因此,在FROM子句中将IN表达式转换为两个表中的id列之间的显式直接比较。
- 在WHERE子句中,限制输出为空的’Reserve’表行。
mysql> SELECT Name from customers LEFT JOIN reserve ON customer_id = Id WHERE Id IS NULL;
+----------+
| Name |
+----------+
| Virender |
+----------+
共 1 行(0.00 秒)
阅读更多:MySQL 教程