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
- Di chuyển bảng
ReservesangFROM - Chuyển điều kiện
INthành so sánh trực tiếpcustomer_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).