MySQL 如何将子查询转换为RIGHT 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 –
- 将子查询中命名的“Customers”表移动到FROM子句中,并使用RIGHT JOIN将其连接到“Reserve”。
-
WHERE子句将customer_id列与子查询返回的ids进行比较。因此将IN表达式转换为两个表FROM子句中id列之间的显式直接比较。
-
在WHERE子句中,限制输出仅限于在“Reserve”表中包含NULL的行。
mysql> SELECT Name from reserve RIGHT JOIN customers ON customer_id = Id WHERE Id IS NULL;
+----------+
| Name |
+----------+
| Virender |
+----------+
1行结果(0.00秒)
阅读更多:MySQL 教程