บทความนี้สาธิตการหาค่าที่มีในตารางแรกแต่ไม่มีในตารางที่สอง (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);