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 INNER 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 đã đặt xe.

mysql> Select Name from customers WHERE customer_id IN (Select id from reserve);
+----------+
| Name     |
+----------+
| Rahul    |
| Yashpal  |
| Gaurav   |
+----------+
3 rows 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 liên kết bên trong -

  • Di chuyển bảng "Dự trữ" có tên trong truy vấn con sang mệnh đề FROM.

  • Mệnh đề WHERE so sánh cột customer_id với id được trả về từ truy vấn con.

Do đó, chuyển đổi biểu thức 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.

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

Như chúng ta thấy rằng kết quả trên không hoàn toàn giống với kết quả của truy vấn con vì vậy hãy sử dụng từ khóa DISTINCT để nhận được kết quả tương tự như sau:

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