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

MySQL LEFT JOIN có thể được sử dụng như thế nào để mô phỏng truy vấn MySQL MINUS?


Vì chúng ta không thể sử dụng truy vấn MINUS trong MySQL, chúng ta sẽ sử dụng LEFT JOIN để mô phỏng truy vấn MINUS. Nó có thể được hiểu với sự trợ giúp của ví dụ sau:

Ví dụ

Trong ví dụ này, chúng ta có hai bảng là Student_detail và Student_info có dữ liệu sau -

mysql> Select * from Student_detail;
+-----------+---------+------------+------------+
| studentid | Name    | Address    | Subject    |
+-----------+---------+------------+------------+
| 101       | YashPal | Amritsar   | History    |
| 105       | Gaurav  | Chandigarh | Literature |
| 130       | Ram     | Jhansi     | Computers  |
| 132       | Shyam   | Chandigarh | Economics  |
| 133       | Mohan   | Delhi      | Computers  |
| 150       | Rajesh  | Jaipur     | Yoga       |
| 160       | Pradeep | Kochi      | Hindi      |
+-----------+---------+------------+------------+
7 rows in set (0.00 sec)

mysql> Select * from Student_info;
+-----------+-----------+------------+-------------+
| studentid | Name      | Address    | Subject     |
+-----------+-----------+------------+-------------+
| 101       | YashPal   | Amritsar   | History     |
| 105       | Gaurav    | Chandigarh | Literature  |
| 130       | Ram       | Jhansi     | Computers   |
| 132       | Shyam     | Chandigarh | Economics   |
| 133       | Mohan     | Delhi      | Computers   |
| 165       | Abhimanyu | Calcutta   | Electronics |
+-----------+-----------+------------+-------------+
6 rows in set (0.00 sec)

Bây giờ, truy vấn sau sử dụng LEFT JOIN sẽ mô phỏng MINUS để trả về các giá trị ‘studentid’ trong student_info nhưng không phải trong bảng Student_detail.

mysql> SELECT studentid from student_info LEFT JOIN Student_detail USING(studentid) WHERE student_detail.studentid IS NULL;
+-----------+
| studentid |
+-----------+
|       165 |
+-----------+
1 row in set (0.07 sec)

Bây giờ, truy vấn sau sẽ cho chúng ta kết quả ngược lại với truy vấn trên, tức là nó sẽ trả về các giá trị ‘studentid’ trong student_detail chứ không phải trong bảng Student_info.

mysql> SELECT studentid from student_detail LEFT JOIN Student_info USING(studentid) WHERE student_info.studentid IS NULL;
+-----------+
| studentid |
+-----------+
|       150 |
|      160  |
+-----------+
2 rows in set (0.00 sec)