MySQL 如何将子查询转换为LEFT JOIN?

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 教程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程