为了使其理解,我们正在使用以下表中的数据 −
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)
现在,通过以下步骤,我们可以将上述子查询转换为right join −
将子查询中命名为'reserve'的表移动到from子句,并使用left join将其与'customers'表连接。where子句将customer_id列与子查询返回的ids进行比较。因此,将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)
以上就是我们如何将子查询转换为左连接?的详细内容。