Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm cách nào chúng ta có thể chuyển đổi truy vấn con thành LEFT JOIN?


Để hiểu rõ, chúng tôi đang sử dụng dữ liệu từ các bảng sau -

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)

Bây giờ, sau đây là một truy vấn phụ sẽ tìm tên của tất cả những khách hàng chưa đặt trước bất kỳ chiếc xe nào.

mysql> Select Name from customers where customer_id NOT IN (Select id From reserve);
+----------+
| Name     |
+----------+
| Virender |
+----------+
1 row in set (0.00 sec)

Bây giờ, với sự trợ giúp của các bước sau, chúng ta có thể chuyển truy vấn con ở trên thành phép nối RIGHT -

  • Di chuyển bảng "Đặt trước" có tên trong truy vấn con sang mệnh đề FROM và nối bảng với "Khách hàng" bằng cách sử dụng LEFT JOIN.
  • Mệnh đề WHERE so sánh cột customer_id với các id được trả về từ truy vấn con. Do đó, hãy chuyển đổi biểu thức IN thành một so sánh trực tiếp rõ ràng giữa các cột id của hai bảng trong mệnh đề FROM.
  • Trong mệnh đề WHERE, giới hạn đầu ra ở những hàng có NULL trong bảng "Dự trữ".
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)