দুটি টেবিলের মধ্যে যে সারিগুলো টেবিল A-তে আছে কিন্তু টেবিল B-তে নেই, সেগুলো পেতে LEFT JOIN + WHERE ... IS NULL প্যাটার্ন ব্যবহার করুন।
সিনট্যাক্স
SELECT a.*
FROM table_a a
LEFT JOIN table_b b ON a.common_col = b.common_col
WHERE b.common_col IS NULL;
উদাহরণ
টেবিল A
CREATE TABLE table_a (value INT);
INSERT INTO table_a VALUES (10), (15), (35), (45);
টেবিল B
CREATE TABLE table_b (value INT);
INSERT INTO table_b VALUES (10), (20), (35), (60);
LEFT JOIN ক্যোয়ারি
SELECT a.*
FROM table_a a
LEFT JOIN table_b b ON a.value = b.value
WHERE b.value IS NULL;
ফলাফল
+-------+
| value |
+-------+
| 15 |
| 45 |
+-------+
১৫ ও ৪৫ শুধু টেবিল A-তে আছে।
বিকল্প পদ্ধতিগুলো
NOT EXISTS (সেমান্টিক্যালি স্পষ্ট)
SELECT * FROM table_a a
WHERE NOT EXISTS (SELECT 1 FROM table_b b WHERE b.value = a.value);
NOT IN (সতর্কতা: NULL মান হলে ফলাফল খালি আসে)
SELECT * FROM table_a
WHERE value NOT IN (SELECT value FROM table_b WHERE value IS NOT NULL);
EXCEPT / MINUS (MySQL 8.0.31+)
SELECT value FROM table_a
EXCEPT
SELECT value FROM table_b;
পারফরম্যান্স তুলনা
| পদ্ধতি | পারফরম্যান্স | NULL হ্যান্ডলিং |
|---|---|---|
| LEFT JOIN ... IS NULL | ভালো (ইনডেক্স ব্যবহার করে) | নিরাপদ |
| NOT EXISTS | ভালো (ইনডেক্স ব্যবহার করে) | নিরাপদ |
| NOT IN | মাঝপথ (সাবকোয়ারি) | NULL হলে সমস্যা |
| EXCEPT | অপ্টিমাইজড | নিরাপদ |
সুপারিশ
সাধারণত LEFT JOIN ... IS NULL বা NOT EXISTS ব্যবহার করুন। ইনডেক্স থাকলে দুটোই দ্রুত।