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

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


Chuyển subquery IN sang INNER JOIN.

Ví dụ subquery

Dữ liệu customers, reserve. Tìm khách đã đặt chỗ:

mysql> Select Name from customers 
    WHERE customer_id IN (Select id from reserve);
+----------+
| Name     |
+----------+
| Rahul    |
| Yashpal  |
| Gaurav   |
+----------+

Chuyển sang INNER JOIN

  1. Di chuyển bảng Reserve sang FROM
  2. Chuyển điều kiện IN thành so sánh trực tiếp customer_id = id
mysql> SELECT Name from customers, reserve 
    WHERE customer_id = id;
+----------+
| Name     |
+----------+
| Rahul    |
| Yashpal  |
| Yashpal  |
| Rahul    |
| Gaurav   |
+----------+
5 rows in set (0.00 sec)

Kết quả bị trùng lặp do khách hàng có nhiều lần đặt. Dùng DISTINCT:

mysql> SELECT DISTINCT name from customers,reserve 
    WHERE customer_id = id;
+----------+
| Name     |
+----------+
| Rahul    |
| Yashpal  |
| Gaurav   |
+----------+
3 rows in set (0.03 sec)

Lưu ý: INNER JOIN tạo tích Descartes rồi lọc, cần DISTINCT để khớp kết quả subquery IN (tự động loại trùng).