কম্পিউটার টিউটোরিয়াল

MySQL-এ LEFT JOIN ব্যবহার করে টেবিল A-র সেই সারিগুলো পাওয়া যা টেবিল B-তে নেই

দুটি টেবিলের মধ্যে যে সারিগুলো টেবিল 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 ব্যবহার করুন। ইনডেক্স থাকলে দুটোই দ্রুত।

  1. MySQL에서 NULL이 아닌 레코드만 조회하기 (IS NOT NULL)

  2. MySQL-এ টেবিলে নেই এমন মানগুলো কোয়েরি করে বের করা (UNION ALL + NOT EXISTS)

  3. MySQL-এ DISTINCT কলাম থেকে গড় (AVG) বের করা

  4. MySQL-এ NOT IN ক্লজ ব্যবহার করে নির্দিষ্ট মান বাদ দিয়ে ডেটা বের করা