NOT IN সাবকোয়েরি দিয়ে বর্জন-ভিত্তিক ফিল্টারিং
MySQL-এ ডুপ্লিকেট ID-র মধ্যে যেসব ID-তে নির্দিষ্ট শর্ত (যেমন FirstName='Chris') পূরণ হয়, সেসব ID বাদ দিয়ে বাকি ID গুলো বের করতে NOT IN সাবকোয়েরি ব্যবহার করা হয়।
টেবিল ও ডেটা
mysql> CREATE TABLE DemoTable (Id INT, FirstName VARCHAR(100)); mysql> INSERT INTO DemoTable VALUES (100,'Chris'), (100,'Robert'), (100,'Mike'), (100,'Sam'), (101,'David'), (101,'Robert'), (210,'Chris'), (210,'Bob'), (210,'Sam');
সব রেকর্ড
+------+-----------+ | Id | FirstName | +------+-----------+ | 100 | Chris | | 100 | Robert | | 100 | Mike | | 100 | Sam | | 101 | David | | 101 | Robert | | 210 | Chris | | 210 | Bob | | 210 | Sam | +------+-----------+
কোয়েরি: 'Chris' আছে এমন ID বাদ দিয়ে অন্য ID বের করা
mysql> SELECT DISTINCT Id FROM DemoTable WHERE Id NOT IN (SELECT Id FROM DemoTable WHERE FirstName = 'Chris');
+------+ | Id | +------+ | 101 | +------+
ব্যাখ্যা
- সাবকোয়েরি:
SELECT Id FROM DemoTable WHERE FirstName = 'Chris'→ রিটার্ন করে 100, 210। - মেইন কোয়েরি:
Id NOT IN (100, 210)→ 100, 210 বাদ দিয়ে বাকি ID (101) রিটার্ন করে। DISTINCT— ডুপ্লিকেট ID (101 দুবার আছে) একবারই দেখায়।
সতর্কতা
- সাবকোয়েরি NULL রিটার্ন করলে
NOT INকোনো রো রিটার্ন করে না (NULL তুলনা UNKNOWN)। - বিকল্প:
NOT EXISTS (SELECT 1 FROM DemoTable d2 WHERE d2.Id = d1.Id AND d2.FirstName = 'Chris')— NULL-সেফ।