Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách chuyển đổi subquery thành LEFT JOIN trong MySQL


Chuyển đổi subquery sang JOIN thường hiệu quả hơn.

Ví dụ subquery

Dữ liệu customers, reserve:

mysql> Select * from customers;
+-------------+----------+
| Customer_Id | Name     |
+-------------+----------+
|           1 | Rahul    |
|           2 | Yashpal  |
|           3 | Gaurav   |
|           4 | Virender |
+-------------+----------+

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 |
+------+------------+

Subquery tìm khách chưa đặt chỗ:

mysql> Select Name from customers 
    where customer_id NOT IN (Select id From reserve);
+----------+
| Name     |
+----------+
| Virender |
+----------+

Chuyển sang LEFT JOIN

  1. Di chuyển bảng Reserve từ subquery sang FROM, nối với Customers bằng LEFT JOIN
  2. Chuyển điều kiện IN thành so sánh trực tiếp cột id
  3. Lọc hàng có NULL ở bảng Reserve (không khớp)
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)

Lợi ích: LEFT JOIN thường tối ưu hơn NOT IN, đặc biệt khi subquery trả về NULL.