如何将子查询转换成左连接?
为了使文章易于理解,我们使用了以下表格中的数据 −
mysql> Select * from customers; +-------------+----------+ | Customer_Id | Name | +-------------+----------+ | 1 | Rahul | | 2 | Yashpal | | 3 | Gaurav | | 4 | Virender | +-------------+----------+ 4 rows in set (0.00 sec) 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 rows in set (0.00 sec)
以下是子查询,它将找出所有没有预约过任何汽车的客户的姓名。
mysql> Select Name from customers where customer_id NOT IN (Select id From reserve); +----------+ | Name | +----------+ | Virender | +----------+ 1 row in set (0.00 sec)
现在,按照以下步骤,我们可以将上述子查询转换成右连接 −
- 将子查询中命名的“Reserve”表移动到 FROM 子句,并使用左连接将其连接到“Customers”。
- WHERE 子句比较 customer_id 列和子查询返回的 id。因此,将 IN 表达式转换成 FROM 子句中两个表 id 列之间的明确直接比较。
- 在 WHERE 子句中,将输出限制为在“ Reserve”表中具有 NULL 的那些行。
mysql> SELECT Name from customers LEFT JOIN reserve ON customer_id = Id WHERE Id IS NULL; +----------+ | Name | +----------+ | Virender | +----------+ 1 row in set (0.00 sec)
广告