ใช้ NATURAL LEFT JOIN ร่วมกับเงื่อนไข IS NULL เพื่อหาแถวที่อยู่ในตารางแรกเท่านั้น
สร้างตารางและข้อมูลตัวอย่าง
-- ตารางแรก CREATE TABLE FirstTableDemo (id INT, name VARCHAR(100)); INSERT INTO FirstTableDemo VALUES (1,'Bob'),(2,'John'),(3,'Carol'); -- ตารางที่สอง CREATE TABLE SecondTableDemo (id INT, name VARCHAR(100)); INSERT INTO SecondTableDemo VALUES (1,'Bob'),(2,'John');
Query หาแถวที่อยู่ใน FirstTableDemo แต่ไม่อยู่ใน SecondTableDemo
SELECT tbl1.* FROM FirstTableDemo tbl1 NATURAL LEFT JOIN SecondTableDemo tbl2 WHERE tbl2.name IS NULL;
ผลลัพธ์ (ได้แค่ Carol):
+------+-------+ | id | name | +------+-------+ | 3 | Carol | +------+-------+
วิธีอื่น: ใช้ NOT IN หรือ NOT EXISTS
-- วิธี NOT IN SELECT * FROM FirstTableDemo WHERE name NOT IN (SELECT name FROM SecondTableDemo); -- วิธี NOT EXISTS (แนะนำ เร็วกว่า) SELECT * FROM FirstTableDemo f WHERE NOT EXISTS (SELECT 1 FROM SecondTableDemo s WHERE s.name = f.name);
หมายเหตุ: NATURAL JOIN จะ JOIN ตามคอลัมน์ที่ชื่อเหมือนกันทั้งหมด หากต้องการควบคุมคอลัมน์ที่ JOIN ให้ใช้ LEFT JOIN ... ON แทน