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

MySQL Query: เลือกแถวที่อยู่ในตารางแรกแต่ไม่อยู่ในตารางที่สอง

ใช้ 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 แทน