ใช้ Subquery ร่วมกับ NOT IN เพื่อหาค่า ID ที่ไม่ปรากฏในเงื่อนไขย่อย (เช่น ID ที่ไม่มีชื่อ Chris)
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
Id int,
FirstName varchar(100) );
Query OK, 0 rows affected (0.69 sec)
เพิ่มข้อมูล (มี Id ซ้ำและชื่อ Chris ซ้ำ)
mysql> insert into DemoTable values(100,'Chris'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(100,'Robert'); Query OK, 1 row affected (0.48 sec) mysql> insert into DemoTable values(100,'Mike'); Query OK, 1 row affected (0.23 sec) mysql> insert into DemoTable values(100,'Sam'); Query OK, 1 row affected (0.48 sec) mysql> insert into DemoTable values(101,'David'); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(101,'Robert'); Query OK, 1 row affected (0.44 sec) mysql> insert into DemoTable values(210,'Chris'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(210,'Bob'); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable values(210,'Sam'); Query OK, 1 row affected (0.17 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
+------+-----------+ | Id | FirstName | +------+-----------+ | 100 | Chris | | 100 | Robert | | 100 | Mike | | 100 | Sam | | 101 | David | | 101 | Robert | | 210 | Chris | | 210 | Bob | | 210 | Sam | +------+-----------+ 9 rows in set (0.00 sec)
คำสั่งหา Distinct ID ที่ไม่มีชื่อ Chris
mysql> select distinct Id from DemoTable where Id not in (select Id from DemoTable where FirstName = 'Chris');
ผลลัพธ์
+------+ | Id | +------+ | 101 | +------+ 1 row in set (0.08 sec)
คำอธิบาย:
- Subquery:
select Id from DemoTable where FirstName = 'Chris'คืนค่า (100, 210) - Main query: หา Id ที่ ไม่อยู่ใน (100, 210) → ได้แค่ 101
DISTINCTป้องกัน Id ซ้ำในผลลัพธ์
ข้อควรระวัง: NOT IN จะคืนค่าว่างเปล่าถ้า Subquery มีค่า NULL อยู่หนึ่งค่า ควรใช้ NOT EXISTS แทนเพื่อความปลอดภัย