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

หาค่าที่ขาดหายระหว่างสองตาราง MySQL ด้วย NOT IN

บทความนี้สาธิตการหาค่าที่มีในตารางแรกแต่ไม่มีในตารางที่สอง (Missing Values) โดยใช้ NOT IN กับ Subquery

สร้างตารางแรก (DemoTable1)

mysql> CREATE TABLE DemoTable1 (Value INT);
mysql> INSERT INTO DemoTable1 VALUES(1), (2), (5), (6), (8);

สร้างตารางที่สอง (DemoTable2)

mysql> CREATE TABLE DemoTable2 (Value INT);
mysql> INSERT INTO DemoTable2 VALUES(1), (2), (3), (4);

คิวรีหาค่าใน Table1 ที่ไม่มีใน Table2

mysql> SELECT Value FROM DemoTable1 
WHERE Value NOT IN (SELECT Value FROM DemoTable2);

ผลลัพธ์ (ค่า 5, 6, 8 ไม่อยู่ใน Table2)

+-------+
| Value |
+-------+
| 5     |
| 6     |
| 8     |
+-------+

คำอธิบาย:

  • NOT IN (subquery) - ค่าที่ไม่อยู่ในผลลัพธ์ของ Subquery
  • Subquery: SELECT Value FROM DemoTable2 คืนค่า (1,2,3,4)
  • Table1 มี (1,2,5,6,8) → ค่าที่ไม่อยู่ใน (1,2,3,4) คือ 5,6,8

ข้อควรระวัง: หาก Subquery คืนค่า NULL อยู่ในลิสต์ NOT IN จะคืนค่าว่างหมด (เพราะ NULL Comparison = UNKNOWN) → ควรใช้ NOT EXISTS แทน:

SELECT Value FROM DemoTable1 t1
WHERE NOT EXISTS (SELECT 1 FROM DemoTable2 t2 WHERE t2.Value = t1.Value);