Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ค้นหาข้อมูลในตาราง MySQL ที่ไม่มีในอีกตารางหนึ่ง


ใช้ Subquery ด้วย NOT IN เพื่อหาแถวในตารางที่สองที่ไม่มีในตารางแรก

สร้างตาราง PresentHistory (2 แถว) และ PastHistory (4 แถว รวม 2 แถวซ้ำ และ 2 แถวใหม่):

mysql> CREATE TABLE PresentHistory ( HisID int, HisName varchar(100) );
mysql> INSERT INTO PresentHistory VALUES (1,'John'), (2,'Bob');
mysql> CREATE TABLE PastHistory ( PastId int, PastName varchar(100) );
mysql> INSERT INTO PastHistory VALUES (1,'John'), (2,'Bob'), (3,'Carol'), (4,'Jason');

Query หาแถวใน PastHistory ที่ไม่มีใน PresentHistory

SELECT * FROM PastHistory WHERE PastName NOT IN (SELECT HisName FROM PresentHistory);

ผลลัพธ์:

+--------+----------+
| PastId | PastName |
+--------+----------+
| 3      | Carol    |
| 4      | Jason    |
+--------+----------+

หมายเหตุ: หาก Subquery คืนค่า NULL จะต้องระวัง เพราะ NOT IN (NULL) จะคืนค่าว่างเปล่า ควรใช้ NOT EXISTS แทนเพื่อความปลอดภัย